2025-02-25
在dump_stack
函数的基础上还有一个WARN_ON()
函数。 WARN_ON()
是Linux内核中一个用于调试的宏,用于在特定条件为真时触发警告并打印警告信息,同时输出当前线程的调用堆栈(Call Stack)。
条件检查:当传入的条件为真(非零)时,触发警告。
警告信息:打印警告信息(包括文件名、行号、函数名等)。
堆栈回溯:自动调用dump_stack()
,打印当前线程的调用堆栈。
非致命性:与BUG_ON()
不同,WARN_ON()
不会导致内核崩溃,而是继续执行。
WARN_ON_ONCE()
:仅第一次触发时打印警告,避免重复输出。
WARN()
:直接打印警告信息,不依赖条件。
WARN_ON_MSG()
:在触发警告时附加自定义消息。
#include <linux/kernel.h>
void my_function(int *ptr)
{
// 检查指针是否为 NULL
if (WARN_ON(!ptr)) {
pr_err("Invalid pointer detected!\n");
return;
}
// 正常逻辑
...
}
[30397.610112] CPU: 4 PID: 9691 Comm: insmod Tainted: G OE 6.8.0-52-generic #53-Ubuntu
[30397.610116] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[30397.610118] RIP: 0010:hello_init+0x15/0xff0 [hello]
[30397.610125] Code: Unable to access opcode bytes at 0xffffffffc0977ffb.
[30397.610127] RSP: 0018:ffffab9182e6bb50 EFLAGS: 00010246
...
BUG_ON