当前的Linux内核调试技术

cti*_*ist 21 linux debugging kernel core linux-kernel

Linux机器在启动和运行软件(包括自定义驱动程序)几小时后冻结.我正在寻找一种方法来调试这样的问题.最近,Linux内核调试技术有了很大的进步,不是吗?

我恳请分享一些关于这个主题的经验.

Pau*_*aul 7

如果您可以在VM中重现问题,那么确实有一种相当新的(AFAIK)技术可能很有用:从运行它的主机调试虚拟机.

例如,请参阅: 使用Windows主机在VMWare中调试Linux内核

VMware Workstation 7还支持强大的技术,可让您确定性地记录系统执行,然后根据需要重放它,甚至可以向后重播.因此,一旦系统崩溃,您可以倒退,看看当时发生了什么(甚至尝试更改某些内容,看看它是否仍然崩溃).IIRC我在某处读到了你无法做到这一点并同时使用VMware/gdb调试内核.

显然,你需要一个VMM.我不知道除了VMware的VMM系列之外,VMM的支持是什么,我不知道是否有任何免费的VMware版本支持这一点.可能不是; 人们不能指望商业公司免费赠送一切.试用版是30天.

如果您的自定义驱动程序是针对机器内部的硬件,那么我认为这可能不起作用.


Tim*_*ost 6

SystemTap似乎是Linux的Dtrace对Solaris的影响.但是我发现它使用起来相当恶劣.不过,你可能想尝试一下.注意:使用调试信息编译内核并花一些时间与内核检测挂钩.

这就是为什么在经验性地将bug缩小到特定模块之后,仍有许多人仍在使用printk().

我不推荐它,只是指出它存在.我可能不够聪明,不能欣赏一些潜在的美丽......我只是为奇怪的设备编写驱动程序.