NXP i.MX8系列平台开发讲解 - 5.3 调试篇(二) - 掌握Dynamic debug调试

专栏文章目录传送门返回专栏目录

Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】


文章目录

目录

[掌握Dynamic debug调试](#掌握Dynamic debug调试)

[1. 认识Dynamic debug](#1. 认识Dynamic debug)

[2. 内核配置](#2. 内核配置)

[3. 使用Dynamic debug](#3. 使用Dynamic debug)

[3.1 查看当前的动态调试设置](#3.1 查看当前的动态调试设置)

[3.2 启用某个文件的调试信息](#3.2 启用某个文件的调试信息)

[3.3 关闭某个文件的调试信息](#3.3 关闭某个文件的调试信息)

[3.4 启用某个函数的调试信息](#3.4 启用某个函数的调试信息)

[3.5 控制特定模块的调试信息](#3.5 控制特定模块的调试信息)

[4. 示例应用](#4. 示例应用)

[5. 小结](#5. 小结)


本章节继续上一篇文章分享关于调试的方法,这个是作为一个涉及Linux 内核驱动开发人员所必备的一个知识点。主要涉及软件内容,掌握该调试方法可以帮助你对调试和寻找问题有很大帮助,而不是单纯只会用printk``printf 这样的方式进行打印。

1. 认识Dynamic debug

Dynamic debug 从字面意思,活跃的调试??大家都称之为动态调试。也就是在系统运行的时候,可以通过手动进行曲调整内核打印的控制,选择打开或者关闭某个模块的打印。这样在真正的工作调试过程中,可以获取到更多的信息帮助我们解决问题。但这一切都需要一些内核配置的开启支持。

2. 内核配置

要使用Dynamic debug功能,首先需要在编译内核时启用相关配置。以下是相关的内核配置选项:

bash 复制代码
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DEBUG_FS=y

CONFIG_DYNAMIC_DEBUG选项用于启用Dynamic debug功能,CONFIG_DEBUG_FS则是启用调试文件系统,这对于查看和控制动态调试信息是必要的。

3. 使用Dynamic debug

一旦内核配置好并编译完成后,就可以通过一些命令来控制Dynamic debug。Dynamic debug的配置文件位于/sys/kernel/debug/dynamic_debug/control。通过向这个文件写入命令,可以开启或关闭特定文件中的调试信息。以下是一些常用的命令示例:

3.1 查看当前的动态调试设置

要查看当前系统中所有动态调试的设置,可以使用以下命令:

bash 复制代码
cat /sys/kernel/debug/dynamic_debug/control

3.2 启用某个文件的调试信息

假设我们有一个文件driver.c,我们希望启用这个文件的所有调试信息,可以使用如下命令:

bash 复制代码
echo 'file driver.c +p' > /sys/kernel/debug/dynamic_debug/control

3.3 关闭某个文件的调试信息

如果希望关闭driver.c文件的调试信息,可以使用如下命令:

bash 复制代码
echo 'file driver.c -p' > /sys/kernel/debug/dynamic_debug/control

3.4 启用某个函数的调试信息

除了文件级别的控制外,还可以对特定函数进行控制。例如,要启用my_function函数的调试信息,可以使用如下命令:

bash 复制代码
echo 'func my_function +p' > /sys/kernel/debug/dynamic_debug/control

3.5 控制特定模块的调试信息

我们还可以按模块名称来控制调试信息,例如要启用my_module模块的调试信息:

bash 复制代码
echo 'module my_module +p' > /sys/kernel/debug/dynamic_debug/control

4. 示例应用

假设我们在调试一个网络驱动程序,名为net_driver.c。我们怀疑在数据包发送过程中出现了问题。为了更详细地了解发送过程中的各个步骤,我们可以在代码中添加pr_debug语句:

bash 复制代码
pr_debug("Packet sent: %s\n", packet_data);

然后,在系统运行时,我们可以启用这个文件的调试信息:

bash 复制代码
echo 'file net_driver.c +p' > /sys/kernel/debug/dynamic_debug/control

这样,系统会在发送数据包时打印详细的信息,帮助我们定位问题。

5. 小结

Dynamic debug是一种非常强大的调试工具,能够在系统运行时灵活控制调试信息的输出。通过合理使用Dynamic debug,可以大大提高调试效率,快速定位和解决问题。希望大家能够掌握这一工具,并在实际工作中灵活运用。

相关推荐
C语言扫地僧25 分钟前
Linux 多线程(理论+实践)
linux·运维·服务器·学习
USE-jx1 小时前
ubuntu22.04录屏黑屏,飞书共享屏幕黑屏问题
linux·飞书
一只小爪子2 小时前
vim 的基础使用
linux·编辑器·vim
whoami-42 小时前
简单使用linux
linux·运维·服务器
fnd_LN2 小时前
Linux硬盘分区 --- 挂载分区mount、卸载分区umount、永久挂载
linux·运维·服务器
银河麒麟操作系统2 小时前
【银河麒麟高级服务器操作系统实例】tcp半链接数溢出分析及处理全过程
linux·运维·服务器·网络·网络协议·tcp/ip
冷曦_sole2 小时前
linux-25 文件管理(三)复制、移动文件,cp,mv
linux·运维·服务器
何大春2 小时前
Ubuntu开机The root filesystem on /dev/sdbx requires a manual fsck 问题
linux·运维·服务器·ubuntu
satadriver3 小时前
ubuntu安装firefox
linux·ubuntu·firefox
小林熬夜学编程3 小时前
【Linux网络编程】第十九弹---深入探索:五种IO模型与高级IO概念,揭秘非阻塞IO实战
linux·运维·服务器·开发语言·网络·c++