1

我已经BUG_ON输入了内核代码。我想知道当时出了什么问题。 BUG_ON将检查条件,如果为真,它将恐慌。

BUG_ON打印 /var/log/messages 中的消息吗?它会在恐慌之前打印它正在检查的值吗?

4

2 回答 2

4

是的。从include/asm-generic/bug.h

#ifndef HAVE_ARCH_BUG
#define BUG() do { \
    printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
    panic("BUG!"); \
} while (0)
#endif

#ifndef HAVE_ARCH_BUG_ON
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0)
#endif

如果您的内核编译正确,BUG_ON将在恐慌之前打印一条消息。

于 2012-10-09T05:50:58.350 回答
1

大多数情况下,这些消息不会记录到 /var/log/messages 中。您将能够查看您是否在机器中配置了串行控制台。如果您想了解更多详细信息,您可能需要添加 printk 并重新编译内核

http://kernelnewbies.org/KernelHacking-HOWTO/Debugging_Kernel

或者您可以收集 vmcore 以获取有关恐慌的更多详细信息

http://www.dedoimedo.com/computers/crash.html

这适用于 suse 或 rhel。对于其他操作系统,它们可能具有类似的机制

于 2012-10-09T18:11:08.353 回答