Linux内核调试

Linux内核调试常用有两种方式:kgdb和kdb。他们都以内核补丁的方式提供,分别在http://kgdb.linsyssoft.comhttp://oss.sgi.com

 

kgdb调试需要两台电脑,其中一台使用gdb通过串口线调试另一台电脑的Linux内核,类似于Windows下用Windbg远程内核调试,不同的是Windows只提供内核的符号文件,可以根据内核函数名下断点,但如果要step in到函数内部就只能面对汇编代码了,而因为Linux内核开源的优势,kgdb则可以做到源码级调试,前提是被调试的内核是打上kgdb补丁重新编译出来的,这个过程比较繁琐而且容易引进一些不确定因素,kgdb pro版也就是收费版对之提供技术支持。

 

kdb通过修改内核使之可以被本地调试(这点像Windows中Mark Russinovich开发的livekd)。内核运行时通过Ctrl+break可以随时唤醒kdb,进入kdb调试环境,这时可以执行bp函数名下断点,bt看堆栈之类的调试操作,但因为此时Linux主系统的大部分功能都处于不可用状态,所以其能执行的操作没有kgdb丰富。同样kdb也需要打上补丁后重新编译内核。

 

八卦一下,为什么Linux不提供原生的内核调试功能?原因是Linus认为内核调试器的引入会使内核开发过于轻松而导致一些bug被漫不经心的修复,而不是基于对对代码的深刻理解。也就是说他认为正确的内核开发模式是:出现BUG-思考-想到自己设计的问题-修改代码。而不是通过调试器的single step功能来一步步发现bug。这个观点当然会受到很多反驳。于是真相在这封邮件中(http://lwn.net/2000/0914/a/lt-debugger.php3)Linus自己说得很清楚:Because I'm a bastard, and proud of it!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值