首页 > 代码库 > C++程序内存泄漏检查

C++程序内存泄漏检查

一、在windows平台上面:
以前我都是用purify,因为没有正版的,很是麻烦。

后来我开始用windows自带的umdh,也很好用:http://support.microsoft.com/kb/268343/en-us
摘要一下步骤如下:

1、准备工作:

1 gflags -i <application name> +ust

注:得先把gflags和umdh的路径加入到Path中,默认为:C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64(我用的是Win64的系统,x86的自己改下)。

2、启动需要检查的程序,并获得其进程号(假设为124);
3、获取heap dump:

umdh -p:124 -f:heapdump_1.log

跑了一段时间之后,再dump一次:

umdh -p:124 -f:heapdump_2.log

4、比较两次生成的dump:

UMDH heapdump_1.log heapdump_2.log > cmp12.txt

然后检查cmp12.txt即可。检查该文件需要对程序的了解和一些检查内存泄漏的经验。有的时候会有误报,总的来说抓大放小,检查那些持续性的泄漏,而不是类似于static对象的一次性的泄漏。这些原则同样适用于valgrind。

 

二、在linux平台上面:
用Valgrind: http://valgrind.org/
这是个相当好的工具。linux平台开发真是相当的方便呢。

valgrind --track-origins=yes --leak-check=full --log-file=valgrind.log --error-limit=no -v <executable path> &