ubuntu 下C++程序利用Valgrind工具调试内存问题

Valgrind工具调试内存问题

  • 1. 简介
  • 2.安装
  • 3.调用

1. 简介

Valgrind 是一个用于构建动态分析工具的仪器框架。它有一组工具,每个工具都可以执行某种调试、分析或类似任务。Valgrind 是模块化架构,因此可以轻松创建新工具,而不会干扰现有结构。常用的工具如下:

  1. Memcheck是一个内存错误检测器,该工具使用最广泛,它可以检测 C 和 C++ 程序中常见的许多与内存相关的错误。
  2. Cachegrind是一个缓存和分支预测分析器。它可以使程序运行得更快。
  3. Callgrind是一个调用图生成缓存分析器。它与 Cachegrind 有一些重叠,但也收集了一些 Cachegrind 没有的信息。
  4. Helgrind是一个线程错误检测器。它可以调试多线程程序。
  5. DRD也是一个线程错误检测器。它与 Helgrind 类似,但使用不同的分析技术,因此可能会发现不同的问题。
  6. Massif是一个堆分析器。它可以使程序使用更少的内存。
  7. 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.调用

  1. 设置
    在makefile中增加调试模式的配置,由于在debug状态下推理出的问题多于release状态下,因此最好切换到debug进行valgrind检测。
CFLAGS += -fPIC  -g
  1. 对于编译好的可执行文件,增加配置选项,如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

你可能感兴趣的:(Linux,ubuntu,linux)