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进行映射操作寄存器

 

参考链接:https://mp.weixin.qq.com/s?src=11&timestamp=1646473583&ver=3658&signature=jrUzgUgWm7x3GtIz-ZAlHIR*rQphD2V*8svF4036XkfyPEjyBoGd-3*L0TIkaXRq5W7FRvR-t0ieHeGFDradBMUDGutHTOUcnC2RMPwuIqhZRhrb4i9y*K*CpihVDMyc&new=1

posted @   cogitoergosum  阅读(317)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 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函数的调用规则
点击右上角即可分享
微信分享提示