使用 CLion 和 Valgrind 调试程序检查内存泄漏
Valgrind Memcheck 是一个用于检测内存使用问题的工具,比如泄漏、无效的内存访问、不正确的释放和引用未定义的值。CLion提供了配置Valgrind ,但不是开箱即用,需要自己安装然后配置一下,通过本文三言两语你将学会CLion 下 Valgrind 的配置。
简介
Valgrind 是一套 Linux 下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind 由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个 CPU 环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。
Valgrind 包括如下一些工具:
- Memcheck。这是 valgrind 应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。我在项目中目前只用到了该模块,在使用数组或者 OpenCV 的 Mat 时,可以利用该工具查看内存使用是否出现问题。
- Callgrind。它主要用来检查程序中函数调用过程中出现的问题。
- Cachegrind。它主要用来检查程序中缓存使用出现的问题。
- Helgrind。它主要用来检查多线程程序中出现的竞争问题。
- Massif。它主要用来检查程序中堆栈使用中出现的问题。
- Extension。可以利用 core 提供的功能,自己编写特定的内存调试工具。
安装Valgrind
Valgrind 的官网为 Valgrind ,我这里给出 Linux下的安装方式:
1 | sudo apt-get install valgrind |
安装好后输入 valgrind --version
可以查看版本号,如下图所示,我的是 3.15.0 . 输入 valgrind --help
可以查看使用帮助。 接着输入 where valgrind
查看安装位置,在CLion 中配置需要用到。
关于 CLion 如何配置 WSL 可参见 WSL | CLion (jetbrains.com)
CLion中配置 Valgrind
在 Settings / Preferences | Build, Execution, Deployment | Dynamic Analysis Tools | Valgrind. 下图所示的位置配置 Valgrind 的路径 /usr/bin/valgrind
,然后就大功告成。
另外也可以指定分析选项或使用默认选项,我使用的默认选项。
确保使用的是WSL进行代码的编译及运行,若没有配置WSL请参见 WSL | CLion (jetbrains.com)
CLion中使用 Valgrind
用 Valgrind memcheck 运行代码即可,一旦运行结束即可查看分析报告。
点击①使用Valgrind memcheck运行
在②处常看分析,可以双击就会出现③中的具体内存泄漏的代码
④处是我故意写的内存泄漏的代码 int* p=new int[8];
要导出结果,请单击Valgrind选项卡左窗格中的导出图标,并指定目的地 XML 文件
参考文献
Debugging your program using Valgrind and CLion on Linux | Ferran Pujol Camins
valgrind安装及使用_leonardohaig的博客-_valgrind 安装