祝各位道友念头通达
GitHub Gitee 语雀 打赏

内核错误调试技巧记录

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])
  1. 在用户空间中修改输出级别
    /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
posted @ 2023-04-04 18:52  韩若明瞳  阅读(24)  评论(0编辑  收藏  举报