免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1683 | 回复: 6
打印 上一主题 下一主题

[网络子系统] 内核单步调试或跟踪 [复制链接]

论坛徽章:
2
天秤座
日期:2014-01-09 21:41:17双鱼座
日期:2014-02-20 21:50:54
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-08 18:02 |只看该作者 |倒序浏览
本帖最后由 duoniK 于 2014-04-08 18:10 编辑

想跟踪 网络中 skb->csum 这个变量在 网络传输中怎么变化,请问大家都用哪种工具或手段啊?
能否像gdb那样 单步调试,跟踪 某一变量的变化呢?
谢谢

另外,想将 skb_add_skb 这个函数 复制和校验和 两个功能分开

修改函数如下:
net/ipv4/tcp.c
Tcp_sendmsg {
---- if ((err = skb_add_data(skb, from, copy)) != 0)
----          goto do_fault;
+++ if ((err = my_skb_add_data(skb, from, copy)) != 0)  //此处没有进行校验和 skb->csum, 只是复制数据
+++          goto do_fault;
}

net/ipv4/tcp_output.c
tcp_write_xmit {
+++                my_csum_skb(skb); //在此计算 skb->csum
                if (unlikely(tcp_transmit_skb(sk, skb, 1, gfp)))
}

static inline int my_skb_add_data(struct sk_buff *skb,
                               char __user *from, int copy)
{
        const int off = skb->len;

        if (skb->ip_summed == CHECKSUM_NONE) {
                if (!copy_from_user(skb_put(skb, copy), from, copy))
                return 0;
        }
       
        __skb_trim(skb, off);
        return -EFAULT;
}

static inline int my_csum_skb(struct sk_buff *skb)
{
        const int off = skb->len;
        if (skb->ip_summed == CHECKSUM_NONE) {
                __wsum csum = csum_partial(skb->data, skb->len, 0);
                printk("before  skb->csum:%ud\n", skb->csum);
                skb->csum = csum_block_add(skb->csum, csum, off);
                printk("after  skb->csum:%ud, csum:%ud\n", skb->csum, csum);
                        return 0;
        }

        return -EFAULT;       
}

因为skb->csum这块出了问题,所以想 跟踪下 skb->csum 的变化,大家有什么好的调试方法么?谢谢

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2014-04-09 14:12 |只看该作者
这个好像比较难,通常只能在指定的位置打探针,难以跟踪指定内存的变化情况。

论坛徽章:
2
天秤座
日期:2014-01-09 21:41:17双鱼座
日期:2014-02-20 21:50:54
3 [报告]
发表于 2014-04-10 11:24 |只看该作者
怎样打探针? 目前只会printk, dump_stack这样简陋的方法啊,还有什么调试手段么?
感觉像是拿着石器时代的工具在开发,效率太低了,还请普及,谢谢
回复 2# humjb_1983


   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
4 [报告]
发表于 2014-04-10 11:41 |只看该作者
systemtap,呵呵~

论坛徽章:
0
5 [报告]
发表于 2014-04-10 12:55 |只看该作者
duoniK 发表于 2014-04-08 18:02
想跟踪 网络中 skb->csum 这个变量在 网络传输中怎么变化,请问大家都用哪种工具或手段啊?
能否像gdb那样 ...


双机串口,好似也可是个办法:)

论坛徽章:
2
天秤座
日期:2014-01-09 21:41:17双鱼座
日期:2014-02-20 21:50:54
6 [报告]
发表于 2014-04-10 17:36 |只看该作者
谢谢回复 4# humjb_1983


   

论坛徽章:
2
天秤座
日期:2014-01-09 21:41:17双鱼座
日期:2014-02-20 21:50:54
7 [报告]
发表于 2014-04-10 17:37 |只看该作者
试一下回复 5# kkddkkdd11


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP