监测C/C++程序内存泄漏工具valgrind(比较适用linux)

一、工具使用要点

        Valgrind提供了一系列工具,其中最常用的是Memcheck,它可以检测内存相关的问题,比如使用未初始化的内存、内存访问越界以及内存泄漏等问题。其他工具如Cachegrind和Callgrind则分别用于缓存和函数调用分析。

        Valgrind还提供了分析程序性能的工具,如Cachegrind可以分析程序的缓存使用情况,帮助优化程序以提高运行效率。

        Valgrind会显著降低程序的运行速度,因此在性能测试中不应使用Valgrind。

二、valgrind安装

        ubuntu中:

sudo apt-get install valgrind

        CentOS中:

sudo yum install valgrind

如果想要源码编译:

下载:
wget https://sourceware.org/pub/valgrind/valgrind-3.16.1.tar.bz2
解压缩:
tar -jxvf valgrind-3.16.1.tar.bz2
打开工作目录:
cd valgrind-3.16.1
配置:
./configure
编译:
make
安装:
sudo make install
检查版本:
valgrind --version

三、如何使用:

检测你的程序:


valgrind --leak-check=yes ./your_program

之后,Valgrind 会在程序结束后报告内存泄漏的位置和相关信息。

其中常用的命令选项:

  • --tool=<name>:指定要使用的工具,默认为Memcheck。例如,--tool=cachegrind将启动Cachegrind工具。
  • --leak-check=full:进行全面的内存泄漏检查。这在查找程序中的内存泄漏问题时特别有用。
  • --log-file=<file>:将输出信息写入指定的文件中。这对于长时间运行的分析或将结果保存以后续处理很有用。

四、例子:


==12345== HEAP SUMMARY:
==12345==     in use at exit: 72,704 bytes in 1 blocks
==12345==   total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated
==12345==
==12345== 72,704 bytes in 1 blocks are definitely lost in loss record 1 of 1
==12345==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12345==    by 0x1086BBF: main (in /path/to/your_program)
==12345==
==12345== LEAK SUMMARY:
==12345==    definitely lost: 72,704 bytes in 1 blocks
==12345==    indirectly lost: 0 bytes in 0 blocks
==12345==      possibly lost: 0 bytes in 0 blocks
==12345==    still reachable: 0 bytes in 0 blocks
==12345==         suppressed: 0 bytes in 0 blocks

从报告中,我们可以得知程序在退出时有 72,704 字节的内存泄漏,共分配了 1 次,但没有释放。同时,报告还显示了内存分配的位置和调用栈信息,有助于我们定位问题所在。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值