tips
Linux Kernel 如何得到某一个 .c
对应的 .o/.i/.s/.lst
文件?
.c
对应的 .o/.i/.s/.lst
文件?printk 打印格式
%ps
打印函数指针对应的函数名字
通过 GDB 调试 Linux 内核
编译具有调试信息的vmlinux,即 使能 CONFIG_DEBUG_INFO 功能
指定某文件的编译等级为
-Og
,这样源码执行流程不会进行优化,如:CFLAGS_filename.o += -Og
(可选)关闭 Linux 内核镜像地址随机化,这样 GDB 断点才停止下来
(可选)qemu 指定只有一个 CPU,这样才能一个 thread 运行 Linux 内核,进行单步调试
通过 trace 调试 Linux 内核
利用 ftrace/bpftrace
动态跟踪 Linux 内核函数,从而达到像 GDB 一样调试 Linux 内核。
(可选)指定某文件的编译等级为 -Og
,这样 static 内核函数不会被优化成 inline,如:CFLAGS_filename.o += -Og
只打印应用层目标源码对应 Linux 内核调试信息
启动动态调试功能,即 使能 CONFIG_DYNAMIC_DEBUG 功能
在 Linux 内核源码中使用
dev_dbg() / pr_debug()
添加打印信息在应用层目标源码中手动使能动态调试功能,即对
/sys/kernel/debug/dynamic_debug/control
进行写操作
Last updated
Was this helpful?