if ((m.cs & 3) == 3) {
/* If this triggers there is no way to recover. Die hard. */
BUG_ON(!on_thread_stack() || !user_mode(regs));
위에서 언급한 바와 같이, 죽은 자 가운데서 부활이란 무엇입니까? 소프트 데스란 무엇인가?
BUG_ON()이 실행된 후에도 나머지 코드는 계속 실행됩니까?
답변1
"죽은 자의 부활"은 실을 죽이는 것을 의미합니다. 계속 실행되도록 하는 대신(아마도 실패 결과를 반환하여) 호출 코드는 정상적으로 종료/계속하도록 처리할 수 있습니다. @don-aman이 언급한 BUG FAQ에서,
BUG_ON( condition );
동일합니까?
if ( condition )
BUG();
따라서 조건이 false이면 BUG_ON이 트리거되지 않고 코드가 계속 실행될 수 있습니다 if
. 따라서 직접 core.c
테스트할 수도 있습니다 .BUG()
>>cat h.c
#include <stdio.h>
#define BUG() __asm__ __volatile__("ud2\n")
int main()
{
printf ("hi\n");
BUG();
printf ("ho\n");
}
>>cc -o h h.c
>>./h
hi
Illegal instruction (core dumped)
>>