2025-02-25
dump_stack()
是 Linux 内核中一个关键的调试函数,用于在系统发生异常(如内核panic、oops或死锁)时打印当前线程的调用堆栈信息。
堆栈回溯:打印当前CPU执行线程的调用堆栈(Call Stack),展示从当前函数到初始调用点的嵌套调用链。
调试辅助:帮助开发者定位代码中导致崩溃或异常的源头,尤其是在没有调试器(如 KGDB)的环境中。
动态触发:可在代码中手动插入dump_stack()
,或在特定条件(如BUG_ON()、panic())下自动触发。
帧指针(Frame Pointer):启用CONFIG_FRAME_POINTER
确保编译器生成可回溯的堆栈帧。
符号表:CONFIG_KALLSYMS=y
和CONFIG_KALLSYMS_ALL=y
启用完整符号解析。
调试选项:CONFIG_DEBUG_KERNEL
、CONFIG_DEBUG_INFO
等。
#include <linux/kernel.h>
void my_debug_function(void)
{
pr_info("Debug trigger:\n");
dump_stack(); // 打印调用堆栈
}
[28258.990860] Call Trace:
[28258.990864] <TASK>
[28258.990868] dump_stack_lvl+0x76/0xa0
[28258.990878] ? __pfx_hello_init+0x10/0x10 [hello]
[28258.990881] dump_stack+0x10/0x20
[28258.990929] init_module_from_file+0x96/0x100
[28258.990932] ? init_module_from_file+0x96/0x100
[28258.990934] ? ksys_read+0x73/0x100
[28258.990946] idempotent_init_module+0x11c/0x310
...