1. 简介
Valgrind 是一个用于构建动态分析工具的仪器框架。它有一组工具,每个工具都可以执行某种调试、分析或类似任务。Valgrind 是模块化架构,因此可以轻松创建新工具,而不会干扰现有结构。常用的工具如下:
- Memcheck是一个内存错误检测器,该工具使用最广泛,它可以检测 C 和 C++ 程序中常见的许多与内存相关的错误。
- Cachegrind是一个缓存和分支预测分析器。它可以使程序运行得更快。
- Callgrind是一个调用图生成缓存分析器。它与 Cachegrind 有一些重叠,但也收集了一些 Cachegrind 没有的信息。
- Helgrind是一个线程错误检测器。它可以调试多线程程序。
- DRD也是一个线程错误检测器。它与 Helgrind 类似,但使用不同的分析技术,因此可能会发现不同的问题。
- Massif是一个堆分析器。它可以使程序使用更少的内存。
- DHAT是一种不同类型的堆分析器。它有助于了解块生命周期、块利用率和布局效率低下的问题。
使用Valgrind调试程序时,程序将比正常运行慢得多(例如 20 到 30 倍),并使用更多内存。
2.安装
在官网https://valgrind.org/downloads/上下载软件,目前最新版本是Valgrind 3.19.0。然后安装下面的命令安装
tar -jxvf valgrind-3.19.0.tar.bz2
cd algrind-3.19.0 //进入文件夹
./configure --prefix=/usr/local/valgrind //根据自己的需要设置安装目录,这里以/usr/local/valgrind为例
make
make install
3.调用
- 设置
在makefile中增加调试模式的配置,由于在debug状态下推理出的问题多于release状态下,因此最好切换到debug进行valgrind检测。
CFLAGS += -fPIC -g
- 对于编译好的可执行文件,增加配置选项,如valgrind --leak-check=full --show-reachable=yes --track-origins=yes --show-mismatched-frees=no -s ./可执行文件 参数1 参数2
valgrind --leak-check=full --show-reachable=yes --track-origins=yes --show-mismatched-frees=no -s ./run ./testimage