内核错误调试技巧记录
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?