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



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

内核中有一些基础设施允许您检测一些锁定条件:

配置检测软件锁定

CONFIG_DETECT_HUNG_TASK

您可以在内核配置的"内核破解"部分找到各种锁检查功能

我一直发现printk在这方面很有用,就像您所做的那样。

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


哦,你说的是"避免"而不是"调试"。。。嗯,最好的避免方法是不要破解内核:^)

说真的,在进行内核级编程时,你必须格外小心。在代码中添加main(),在添加到运行中的内核之前,在用户模式下对例程进行压力测试。并仔细阅读您的代码,尤其是在您将bug隔离到特定部分之后。有一次,当一些ANSI艺术挂起操作系统时,我在LynxOS的终端驱动程序中发现了一个无限循环。显然,一些初级程序员编写了这一部分,将转义序列选项解析为文本而不是数字。代码太糟糕了,我很反感试图找到迫使循环的确切错误,只是重写了大部分驱动程序。并在添加到内核之前在用户模式下对其进行了测试。

您可以尝试启用NMI看门狗。

最新更新