我已经BUG_ON
输入了内核代码。我想知道当时出了什么问题。
BUG_ON
将检查条件,如果为真,它将恐慌。
将BUG_ON
打印 /var/log/messages 中的消息吗?它会在恐慌之前打印它正在检查的值吗?
我已经BUG_ON
输入了内核代码。我想知道当时出了什么问题。
BUG_ON
将检查条件,如果为真,它将恐慌。
将BUG_ON
打印 /var/log/messages 中的消息吗?它会在恐慌之前打印它正在检查的值吗?
是的。从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
将在恐慌之前打印一条消息。
大多数情况下,这些消息不会记录到 /var/log/messages 中。您将能够查看您是否在机器中配置了串行控制台。如果您想了解更多详细信息,您可能需要添加 printk 并重新编译内核
http://kernelnewbies.org/KernelHacking-HOWTO/Debugging_Kernel
或者您可以收集 vmcore 以获取有关恐慌的更多详细信息
http://www.dedoimedo.com/computers/crash.html
这适用于 suse 或 rhel。对于其他操作系统,它们可能具有类似的机制