valgrind安装及使用

微信公众号:幼儿园的学霸
个人的学习笔记,关于OpenCV,关于机器学习, … 问题或建议,请公众号留言;

目录

valgrind介绍

valgrind安装

valgrind运行界面分析

valgrind介绍

Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。
Valgrind包括如下一些工具:

  1. Memcheck。这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。我在项目中目前只用到了该模块,在使用数组或者OpenCV的Mat时,可以利用该工具查看内存使用是否出现问题。
  2. Callgrind。它主要用来检查程序中函数调用过程中出现的问题。
  3. Cachegrind。它主要用来检查程序中缓存使用出现的问题。
  4. Helgrind。它主要用来检查多线程程序中出现的竞争问题。
  5. Massif。它主要用来检查程序中堆栈使用中出现的问题。
  6. Extension。可以利用core提供的功能,自己编写特定的内存调试工具。

valgrind安装

1.valgrind下载:
http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2
2.valgrind安装:

tar -jxvf valgrind-3.12.0.tar.bz2
cd valgrind-3.12.0
./configure
make
sudo make install

3.查看valgrind是否安装成功:

valgrind --help
#运行上面命令查看相关帮助

4.使用valgrind内存泄露检测工具:
首先进入程序所在目录,此处我的程序是LaneDetectionDemo,执行下面命令

valgrind --tool=memcheck --leak-check=full ./LaneDetectionDemo


其中,采用valgrind内存泄露检测运行程序时,程序执行速度将会非常慢。
为了使valgrind发现的错误更精确,如能够定位到源代码行,建议在编译时加上-g参数,编译优化选项请选择O0,虽然这会降低程序的执行效率。
5.如果安装有CLion软件,CLion带有valgrind调试模式。如图1所示,安装有valgrind时,图中圈出的部分将为绿色可点击调试,查看是否有内存泄漏等问题产生。

图1 CLion和valgrind

图1 CLion和valgrind

 

valgrind运行界面分析

如图1所示为valgrind的一个调试界面,图片来源于网络。

图2 valgrind 内存泄漏检测界面

图2 valgrind 内存泄漏检测界面

 

  • 左边显示类似行号的数字(32372)表示的是 Process ID。
  • 最上面的红色方框表示的是 valgrind 的版本信息。
  • 中间的红色方框表示 valgrind 通过运行被测试程序,发现的内存问题。通过阅读这些信息,可以发现:
  1. 这是一个对内存的非法写操作,非法写操作的内存是4 bytes。
  2. 发生错误时的函数堆栈,以及具体的源代码行号。
  3. 非法写操作的具体地址空间。
  • 最下面的红色方框是对发现的内存问题和内存泄露问题的总结。内存泄露的大小(40 bytes)也能够被检测出来。


下面的是我的公众号二维码图片,欢迎关注。

图注:幼儿园的学霸

图注:幼儿园的学霸

 

 

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐