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
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