内核错误调试技巧记录
printk 打印调试
include/linux/printk.h
头文件
extern int console_printk[];
#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])
- 在用户空间中修改输出级别
在/proc/sys/kernel/printk
7 4 1 7
这四个值分别表示上述代码中: console_loglevel, default_message_loglevel, minimum_console_loglevel, default_console_loglevel 的值
利用KGDB
- 如果系统挂掉也是可以在线调试
- 需要给内核打补丁
- 然后可以借助工具 gdb和ddd(带界面)远程调试
oops 信息和栈回溯
- oops 就是内核出错时打印出来的信息
- 内核出错时, 自动打印出栈调用信息,称之为栈回溯
- 编译内核时,增加
-fno-omit-frame-pointer
,可以打印出寄存器等更多的信息,配合反汇编定位问题
内核堆栈API调用
- 引入头文件
#include <asm/ptrace.h>
- 然后调用相应的 API函数即可, 接口函数在
- dump_stack: 打印堆栈, 接口函数在
lib/dump_stack.c
- dump_stack: 打印堆栈, 接口函数在
本文来自博客园踩坑狭,作者:韩若明瞳,转载请注明原文链接:https://www.cnblogs.com/han-guang-xue/p/17287278.html