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

于 2012-10-09T18:11:08.353 に答える