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常见问题解答中,
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)
>>