嵌入式相关的动态检测工具

💡 原文中文,约5600字,阅读约需14分钟。
📝

内容提要

Valgrind是一套开源的仿真调试工具集合,包含多个工具如Memcheck、Cachegrind、Helgrind、Callgrind和Massif。Valgrind通过仿真方式对程序进行调试,可以检查内存操作错误。安装Valgrind简单,使用时需注意性能和内存消耗。交叉编译Valgrind需下载源码包,修改configure文件,编译安装后可在目标设备上使用。

🔎

延伸解读

Valgrind 的仿真机制与性能代价

Valgrind 通过仿真方式运行程序:它先获取实际处理器的控制权,再仿真一个虚拟处理器,让应用程序运行其上。应用程序无需重新编译,Valgrind 直接解释二进制代码,从而监视内存操作。但这种机制导致程序运行速度慢得多,内存消耗也大得多。因此,Valgrind 更适合在性能较好的机器上、于开发调试阶段使用,而不适合生产环境。

Memcheck 检测结果解读要点

使用 Memcheck 时,编译需加 -g 以包含调试信息,错误消息才能显示确切行号。运行命令为 valgrind --leak-check=yes ./程序。输出中,Invalid write 指出越界写,堆栈跟踪显示分配和调用位置。内存泄漏分为 definitely lost 和 possibly lost,其中 definitely lost 必须修复。输出中的数字如 7407 是进程 ID。

交叉编译 Valgrind 的关键步骤与注意事项

交叉编译需下载源码,修改 configure 文件,将 armv7* 改为 armv7*|arm。配置时指定 --host=arm-linux-gnueabihf、交叉编译器绝对路径及 --prefix 安装路径。编译安装后,将 tmp 文件夹拷贝到目标板,注意其大小约一百多兆,需确认存储空间足够。临时使用时,需设置 export VALGRIND_LIB="tmp/lib/valgrind",否则会报找不到 memcheck 工具,且该设置仅当前终端有效。

❓

Q&A

Valgrind是什么?

Valgrind是一套开源的仿真调试工具集合,主要用于检测程序中的内存问题和性能分析。

Memcheck工具的主要功能是什么?

Memcheck工具用于检测程序中的内存问题,包括未初始化内存、内存泄漏等。

如何安装Valgrind?

可以通过包管理器安装Valgrind,或下载源码编译安装,使用命令'sudo apt install valgrind'或'./configure'进行编译。

Valgrind的性能如何?

Valgrind通过仿真方式调试程序,运行速度较慢且内存消耗较大,适合在开发调试阶段使用。

如何使用Valgrind检测内存泄漏?

使用Memcheck工具检测内存泄漏时,需要编译程序时包含调试信息,并使用命令'valgrind --leak-check=yes ./程序名'进行检测。

Valgrind的交叉编译步骤是什么?

交叉编译Valgrind需下载源码,修改configure文件,生成Makefile后进行编译和安装。

🏷️

标签

➡️

继续阅读