2025-02-25
BUG_ON()
是Linux内核中一个用于调试和错误处理的宏,用于在特定条件为真时触发内核异常(如panic
或oops
),并打印调试信息(包括调用堆栈)。
条件检查:当传入的条件为真(非零)时,触发内核异常。
调试辅助:帮助开发者快速定位代码中的逻辑错误或非法状态。
异常处理:触发异常后,内核会打印调用堆栈(通过dump_stack()
)并终止当前线程或系统。
void my_function(int *ptr)
{
BUG_ON(!ptr); // 如果 ptr 为 NULL,触发异常
*ptr = 42;
}
[30902.242390] kernel BUG at /home/blue/modules/hello/hello.c:10!
[30902.242408] invalid opcode: 0000 [#1] PREEMPT SMP PTI
[30902.242414] CPU: 1 PID: 10102 Comm: insmod Tainted: G W OE 6.8.0-52-generic #53-Ubuntu
[30902.242419] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[30902.242421] RIP: 0010:hello_init+0x15/0xff0 [hello]
[30902.242430] Code: Unable to access opcode bytes at 0xffffffffc0977ffb.
[30902.242433] RSP: 0018:ffffab91824c7870 EFLAGS: 00010246
...