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,可以大大提高调试效率,快速定位和解决问题。希望大家能够掌握这一工具,并在实际工作中灵活运用。

相关推荐
写代码的学渣2 小时前
ubuntu 22.04 新装的系统 xshell 连不上
linux·运维·ubuntu
序属秋秋秋3 小时前
《Linux系统编程之进程环境》【环境变量】
linux·运维·服务器·c语言·c++·操作系统·系统编程
云计算练习生4 小时前
linux shell编程实战 10 Git工具详解与运维场景实战
linux·运维·git
虚伪的空想家6 小时前
KVM的ubuntu虚机如何关闭安全启动
linux·安全·ubuntu
t1987512811 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
skywalk816311 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
晚风吹人醒.12 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Hard but lovely13 小时前
linux: pthread库的使用和理解
linux
这儿有一堆花15 小时前
Kali Linux:探测存活到挖掘漏洞
linux·运维·服务器
松涛和鸣15 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法