linux内核常用到的调试方法
bug 一般分为这几类
1、crash, 最常见,一般要是对底层驱动寄存器没了解清楚,一个是对内核接口熟悉不够,导致调用出错
2 死锁, 出现在内核多线程或中断中
3、逻辑问题
4、性能优化, 在资源有限的情况下,需要进行优化,特别出现在不同硬件的运行性能时,需要考虑哪个硬件容易受瓶颈
调试工具的类别
1、Logs and dump analysis,在出现crash或Panic,通过ep寄存器定位到对应的代码
2、Tracing/profiling 这类工具不仅用于调试,也可以用到了解程序的运行流程
3、Interactive debugging。主要就是 gdb
4、Debugging frameworks。 调试框架,例如Ftrace、SystemTap
本人常用到的调试
1、CONFIG_DYNAMIC_DEBUG
在可能出错的位置上加入pr_info(),dev_info()调试信息。给客户远程时,通过配置
$ mount -t debugfs none /sys/kernel/debug/ $ cd /sys/kernel/debug/dynamic_debug/ $ echo “file xxx.c +p” > control $ echo “file svcsock.c line 1603 +p” > control $ echo “file drivers/usb/core/* +p” > control $ echo “file xxx.c -p” > control
进行远程查看出错信息
2、分析 Kernel Panic 的 信息
3、WARN_ON()
用于打印的函数调用栈
4、devmem2
用于读写寄存器或者通过/dev/mem进行映射操作寄存器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2020-03-05 qt QString
2020-03-05 C++ 继承父类的构造函数
2020-03-05 C++类中const函数与非const函数的调用规则