在linux的内核中检测无限循环的简便方法

时间:2011-06-16 00:24:23

标签: linux linux-kernel

我刚刚花了两个多小时试图找到修改linux内核的bug,每次当我将模块连接到内核时都很好但是当我连接它时我的鼠标停止工作,所以使用printk我发现无限循环,我的问题是有人知道很好的技术来检测这样的错误,有时很难找到这样的循环,并且linux变得不可预测,内核so how can I avoid infinite loops提前感谢

3 个答案:

答案 0 :(得分:3)

内核中有一些基础结构允许您检测某些锁定条件:

CONFIG_DETECT_SOFTLOCKUP

CONFIG_DETECT_HUNG_TASK

你可以在内核配置的“Kernel Hacking”部分找到各种锁定检查功能

答案 1 :(得分:0)

我总是发现printk对你很有用,就像你一样。

其他选项是在调试模式下在Bochs中运行内核。我记得,有一种在gdb中运行内核的方法。谷歌可以提供这些选择。

<小时/> 哦,你说“避免”不是“调试”......嗯,最好的避免方法是不破解内核:^)

说真的,在进行内核级编程时,你必须格外小心。在添加到正在运行的内核之前,将一个main()添加到在usermode中对您的例程进行压力测试的代码中。并阅读您的代码,特别是在您将错误隔离到特定部分之后。我曾经在LynxOS的终端驱动程序中找到了一个无限循环,当一些ANSI艺术挂起操作系统时。显然,一些初级程序员编写了该部分,将转义序列选项解析为文本而不是数字。代码是如此糟糕,我厌恶试图找到强制循环的确切错误,并重写了大部分驱动程序。并在添加到内核之前在usermode中测试它。

答案 2 :(得分:0)

您可以尝试启用the NMI watchdog