【问题标题】:easy way to detect infinite loop in kernel of the linux检测Linux内核中无限循环的简单方法
【发布时间】:2013-08-13 19:09:12
【问题描述】:

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

【问题讨论】:

  • 谷歌“停机问题”。

标签: linux linux-kernel


【解决方案1】:

内核中有一些基础设施可以让您检测一些锁定条件:

CONFIG_DETECT_SOFTLOCKUP

CONFIG_DETECT_HUNG_TASK

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

【讨论】:

    【解决方案2】:

    和你一样,我一直觉得 printk 对此很有用。

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


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

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

    【讨论】:

    • 看门狗对于避免无限循环很有用,也就是说,直到您尝试将硬件看门狗设置为 1 分钟,并且 BIOS 在热重启时首先将单位设置为秒,然后...
    【解决方案3】:

    您可以尝试启用the NMI watchdog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2014-04-12
      • 2015-12-11
      • 1970-01-01
      • 2020-04-10
      • 2012-11-02
      相关资源
      最近更新 更多