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 で機能します。他のOSの場合、同様のメカニズムを持つ可能性があります