2012-10-09 2 views
1

나는 BUG_ON을 커널 코드에 쳤다. 나는 그 때 잘못 된 것이 무엇인지 알고 싶다. BUG_ON은 조건을 검사하고 참이면 패닉 상태가됩니다.Will BUG_ON 인쇄 메시지

BUG_ON 메시지를/var/log/messages에 출력 하시겠습니까? 당황하기 전에 확인할 값을 출력합니까?

답변

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는 당황하기 전에 메시지를 인쇄합니다.

+2

메시지는 로거가 쓸 수있을만큼 시스템을 계속 실행해야하므로 메시지가'/ var/log/messages'에 ** 로그되지 않습니다. 디스크에. 공포는 시스템을 거의 즉시 죽인다. – duskwuff

1

메시지는 대부분/var/log/messages에 기록되지 않습니다. 시스템에 직렬 콘솔을 구성했는지 확인할 수 있습니다. 당신이 세부 사항을 더 원하는 경우 커널에게

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

을의 printk를 추가하고 다시 컴파일해야 할 수도 있습니다 또는 당신은

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

이 수세 또는 작동 공황에 대한 자세한 정보를 얻을 수있는이 vmcore를 수집 할 수 있습니다 rhel. 다른 OS의 경우 비슷한 메커니즘을 가지고있을 수도 있습니다.