免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 11711 | 回复: 33

大家在研究BSD内核的时候都有些什么方法? [复制链接]

论坛徽章:
0
发表于 2006-02-18 08:21 |显示全部楼层
看了assiss兄翻译的《NetBSD: Kernel Programming FAQ》,里面涉及到了一些内核调试的方法,
不知道大家平时摆弄BSD内核的时候都有些什么方法?

就我来说,尝试过以下几个方法:
    1、阅读相关书籍和文档。
    2、阅读源代码。
    3、汇编级的内核调试,也就是系统自带的DDB。这个东西唯一不方便的就是无法关联源代码,所以我也只用过它来跟踪内核中的函数调用路径,还有就是查看内核中的数据结构。比如我分析路由表的时候,用DDB把系统中真实的路由表全部查看一遍,那查找添加删除算法也就弄得差不多了。
    4、源代码级的内核调试。这个方法需要两台机器,一台做目标机,运行DDB;一台做调试机,运行gdb。两台机器通过串口相连,很像嵌入式开发中的单板调试。这个方法我原来在FreeBSD5.1上没有试验成功,最近换了6.0,准备再尝试一下,不知道有没有哪位大侠实现过这种调试方法?

论坛徽章:
0
发表于 2006-02-18 09:34 |显示全部楼层
相关文档太少。
幸亏代码写的比较清晰,要不就郁闷死了~~

论坛徽章:
0
发表于 2006-02-18 10:10 |显示全部楼层
原帖由 _z_ 于 2006-2-18 09:34 发表
相关文档太少。
幸亏代码写的比较清晰,要不就郁闷死了~~


缺文档确实是个最大的问题。经常要看运气,偶尔能在网上淘倒一些论述内核模块的文章,但大家都去
这么淘也不是个办法,这是严重的人力资源浪费,,所以我才打算先逐步把我淘到的文章介绍过来。

BSD的代码确实写得跟诗篇一样,优雅简洁,估计是因为BSD一直对是否最先支持某项功能不感兴趣,而
是专注于做出最好的实现方案吧?

但是如果单纯的读代码,有时候对于自己的理解不是很有把握,所以还是希望能够进行内核调试,尤其是
单步跟踪一下,不知兄台对此有和看法?

论坛徽章:
0
发表于 2006-02-18 11:04 |显示全部楼层
把要调试的部份作为模块方式编译再载入是否可行?
http://cnsnap.cn.freebsd.org/doc ... erneldebug-kld.html
不过不是所有东西都可以用模块来跑的。

论坛徽章:
0
发表于 2006-02-18 11:10 |显示全部楼层
我连文档都还没读完呢。
等有时间再搞吧。

论坛徽章:
0
发表于 2006-02-18 11:17 |显示全部楼层
原帖由 colddawn 于 2006-2-18 11:04 发表
把要调试的部份作为模块方式编译再载入是否可行?
http://cnsnap.cn.freebsd.org/doc ... erneldebug-kld.html
不过不是所有东西都可以用模块来跑的。


这确实是一种不错的方法,但和你直接修改内核代码一样,你所修改的部分将运行于内核模式下。
问题是如何方便地进行调试?是不是只有打印比较好?单步跟踪的话将无法关联到C代码,我想
还是要靠两台机器才能解决这个问题。

论坛徽章:
0
发表于 2006-02-18 11:19 |显示全部楼层
原帖由 assiss 于 2006-2-18 11:10 发表
我连文档都还没读完呢。
等有时间再搞吧。


要理论联系实际,实际辅助理论嘛,,很多东西文档上都没有讲清楚,需要自己去摸索。

论坛徽章:
0
发表于 2006-02-18 11:30 |显示全部楼层
原帖由 雨丝风片 于 2006-2-18 11:17 发表


这确实是一种不错的方法,但和你直接修改内核代码一样,你所修改的部分将运行于内核模式下。
问题是如何方便地进行调试?是不是只有打印比较好?单步跟踪的话将无法关联到C代码,我想
还是要靠两台机器才能 ...


这种方法应该还算比较方便了吧,载入符号表之后的调用虽不至于源代码级别但是基本流程应该能看懂了,不过我也只是看过,但从来没实践过,回头我去试试看效果。

最根本的办法肯定是双机调试了,有空用虚拟机模拟个环境玩玩看,是该拿些时间研究下内核了。

论坛徽章:
0
发表于 2006-02-18 12:01 |显示全部楼层
原帖由 雨丝风片 于 2006-2-18 10:10 发表
但是如果单纯的读代码,有时候对于自己的理解不是很有把握,所以还是希望能够进行内核调试,尤其是
单步跟踪一下,不知兄台对此有和看法?


在代码的关键部分加printf,看输出。。。

论坛徽章:
0
发表于 2006-02-18 12:14 |显示全部楼层
原帖由 雨丝风片 于 2006-2-18 08:21 发表
看了assiss兄翻译的《NetBSD: Kernel Programming FAQ》,里面涉及到了一些内核调试的方法,
不知道大家平时摆弄BSD内核的时候都有些什么方法?

就我来说,尝试过以下几个方法:
    1、阅读相关书籍和文档。
     ...
    4、源代码级的内核调试。这个方法需要两台机器,一台做目标机,运行DDB;一台做调试机,运行gdb。两台机器通过串口相连,很像嵌入式开发中的单板调试。这个方法我原来在FreeBSD5.1上没有试验成功,最近换了6.0,准备再尝试一下,不知道有没有哪位大侠实现过这种调试方法?  


第4种方法,目标机不是运行 DDB,而是在内核里面打开 KGDB。
这种方法我还没有用过,只在一个朋友那里看他调试过。

参考:
http://www.netbsd.org/Documentation/kernel/kgdb.html

另外在 mailing list 里面,有人说用 qemu 也能这样调试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,8.5折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时8.5折扣期:2019年9月30日前


----------------------------------------

大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP