valgrind检查内存泄露简介

valgrind检查内存泄露简介

ID:34005094

大小:75.73 KB

页数:7页

时间:2019-03-03

valgrind检查内存泄露简介_第1页
valgrind检查内存泄露简介_第2页
valgrind检查内存泄露简介_第3页
valgrind检查内存泄露简介_第4页
valgrind检查内存泄露简介_第5页
资源描述:

《valgrind检查内存泄露简介》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、内存动态分析工具Valgrind初探用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好儿天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一款工具。Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86,amd64和ppc32架构上。valgrind包含一个核心,它提供一个虚拟的CPU运行程序,还有一系列的工具,它们完成调试,剖析和一些类似的任务。valgrind是高度模块化的,所以开发人员或者用户可以给它添加新的工具而不会损

2、坏己有的结构。你可以在它的网站上下载到最新的valgrind,它是开放源码和免费的。3.7.0版本的下载地址为http://valgrind.Org/downloads/valgrind-3.7.0.tar.bz2ovalgrind包含儿个标准的工具,它们是:1、memcheckmemcheck探测程序中内存管理存在的问题。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用。因此memcheck工具能够探测到以下问题:1)使用未初始化的内存2)读/写已经被释放的内存3)读/写内存越界4)读/写不恰当的内存栈空间5)内

3、存泄漏6)使用malloc/new/new[]和free/delete/delete[]不匹配。2、cachegrindcachegrind是一个cache剖析器。它模拟执行CPU屮的L1,D1和L2cache,因此它能很精确的指出代码川的cache未命中。如果你需要,它可以打印出cache未命中的次数,内存引用和发生cache未命中的每一行代码,每一个函数,每一个模块和整个程序的摘要。如果你要求更细致的信息,它可以打印出每一行机器码的未命中次数。在x86和amd64上,cachegrind通过CPUID自动探测机器的cache趾置,所以在多数情况下它不再

4、需要更多的配置信息了。3^helgrindhelgrind查找多线程程序小的竞争数据。helgrind查找内存地址,那些被多于一条线程访问的内存地址,但是没有使用一致的锁就会被查出。这表示这些地址在多线程间访问的时候没有进行同步,很可能会引起很难查找的时序问题。valgrind被设计成非侵入式的,它直接工作于可执行文件上,因此在检查前不需要重新编译、连接和修改你的程序。要检查一个程序很简单,只需要执行下面的命令就可以了valgrind・-tool=tool_nameprogram_name比如我们要对Is-I命令做内存检查,只需要执行下面的命令就可以了va

5、lgrind・-tool=memcheckIs-I不管是使用哪个工具,valgrind在开始之前总会先取得对你的程序的控制权,从可执行关联库里读取调试信息。然后在valgrind核心提供的虚拟CPU±运行程序,valgrind会根据选择的工具来处理代码,该工具会向代码中加入检测代码,并把这些代码作为最终代码返回给valgrind核心,最后valgrind核心运行这些代码。如果要检查内存泄漏,只需要增加-leak-check=yes就可以了,命令如下valgrind・-tool=memcheck・-leak-check=yesIs-I不同工具间加入的代码变化

6、非常的大。在每个作用域的末尾,memcheck加入代码检查每一片内存的访问和进行值计算,代码大小至少增加12倍,运行速度要比平时慢25到50倍。valgrind模拟程序中的每一条指令执行,因此,检查工具和剖析工具不仅仅是对你的应用程序,还有对共享库,GNUC库,X的客户端库都起作用。首先,在编译程序的时候打开调试模式(gcc编译器的・g选项)。如果没有调试信息,即使最好的valgrind工具也将中能够猜测特定的代码是属于哪一个函数。打开调试选项进行编译后再用valgrind检查,valgrind将会给你的个详细的报告,比如哪一行代码岀现了内存泄漏。当检查的

7、是C++程序的时候,还应该考虑另一个选项-fno-inlineo它使得函数调用链很清晰,这样可以减少你在浏览大型C++程序时的混乱。比如在使用这个选项的时候,用memcheck检查openoffice就很容易。当然,你对能不会做这项工作,但是使用这一选项使得valgrind生成更精确的错误报告和减少混乱。一些编译优化选项(比如・02或者更高的优化选项),可能会使得memcheck提交错误的未初始化报告,因此,为了使得valgrind的报告更精确,在编译的时候最好不要使用优化选项。如果程序是通过脚本启动的,可以修改脚本里启动程序的代码,或者使用-trace-

8、children=yes选项来运行脚本。今天,对它做一下初步的测试

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。