Linux内核调试方法
问题可以分为几类
- crash
- lockup, 预防比调试更重要
- 逻辑错误或者实现错误, 运行结果不符合预期
- 资源泄露
- 性能不足
调试工具:
- log and dump分析, 很多异常都会有一堆kenrel panic信息,通过这些信息可以分析出引起异常的代码
- Tracing / Profiling, 可以用来追踪程序的运行流程
- 交互式的debug, 例如gdb
- debugging frameworks, 例如Ftrace, SystemTap
触发kernel panic
echo “c”
> /proc/sysrq-trigger
或者通过LKDTM
最常用的方法: 打印
printk
最原始的方法,不推荐使用
pr_xx
使用prxx 函数族类替代 printk, 例如 premerg(), pralert(), prcrit(), prerr(), prwarning(), prnotice(), prinfo(), pr_debug()
dev_xx
同样是一个函数族, devemerg(), devalert(), devcrit(), deverr(), devwarn(), devnotice(), devinfo(), devdbg()
需要传入strice device* 参数, 并且会打印出这个device的名字