定位内核模块中导致内核崩溃的代码位置

本文介绍了如何在内核模块导致内核崩溃时,利用kdump生成的core文件和crash工具进行问题定位。通过分析栈信息、调用路径,结合gdb和dis指令查看源代码,找出内核函数或模块中的错误位置。在模块中,可以通过增加编译时的debug选项,找到汇编代码并匹配源代码,从而定位问题。
摘要由CSDN通过智能技术生成
开发内核模块时,个人认为kdump+crash是必备的工具,kdump用于在内核崩溃时生成转储文件(core文件),crash用来分析core文件,查看崩溃时的栈信息、调用信息、出错的执行路径等。
  如果出错的位置是在内核函数中(当然大部分是由于模块不正确地调用内核函数),则很容易看到内核的代码位置。假设出错的函数是blk_requeue_request,出错的位置在blk_requeue_request函数中的偏移为82,在crash中输入“gdb L*blk_requeue_request+82”即可查看出错位置对应的源代码,如下图所示:

当然也可以通过“dis -l  blk_requeue_request+82 ”或者“dis -l 地址”(地址为RIP的值)也可以看到,但是没有上面的命令直观,总之是很容易看到的,然后再根据业务逻辑很容易就能找到错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值