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