Valgrind检查内存泄露简介.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内存动态分析工具Valgrind初探 用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄 漏或者一个内存访问越界,需要要花上好儿天时间,如果有一款工具能够帮助我们做这件事 情就好了,valgrind正好就是这样的一款工具。 Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86, amd64和ppc32架构上。valgrind包含一个核心,它提供一个虚拟的CPU运行程序,还有 一系列的工具,它们完成调试,剖析和一些类似的任务。valgrind是高度模块化的,所以开 发人员或者用户可以给它添加新的工具而不会损坏己有的结构。 你可以在它的网站上下载到最新的valgrind,它是开放源码和免费的。 3.7.0 版本的下载地址为 HYPERLINK http://valgrind.Org/downloads/valgrind-3.7.0.tar.bz2o http://valgrind.Org/downloads/valgrind-3.7.0.tar.bz2o valgrind包含儿个标准的工具,它们是: 1、 memcheck memcheck探测程序中内存管理存在的问题。它检查所有对内存的读/写操作,并 截取所有的malloc/new/free/delete调用。因此memcheck工具能够探测到以下问题: 1) 使用未初始化的内存 2) 读/写已经被释放的内存 3) 读/写内存越界 4) 读/写不恰当的内存栈空间 5) 内存泄漏 6) 使用 malloc/new/new[]和 free/delete/delete[]不匹配。 2、 cachegrind cachegrind是一个cache剖析器。它模拟执行CPU屮的L1, D1和L2 cache,因此它 能很精确的指出代码川的cache未命中。如果你需要,它可以打印出cache未命中的次数, 内存引用和发生cache未命中的每一行代码,每一个函数,每一个模块和整个程序的摘要。 如果你要求更细致的信息,它可以打印出每一行机器码的未命中次数。在x86和amd64上, cachegrind通过CPUID自动探测机器的cache趾置,所以在多数情况下它不再需要更多的 配置信息了。 3^ helgrind helgrind查找多线程程序小的竞争数据。helgrind查找内存地址,那些被多于一条线程 访问的内存地址,但是没有使用一致的锁就会被查出。这表示这些地址在多线程间访问的时 候没有进行同步,很可能会引起很难查找的时序问题。 valgrind被设计成非侵入式的,它直接工作于可执行文件上,因此在检查前不需要重新 编译、连接和修改你的程序。要检查一个程序很简单,只需要执行下面的命令就可以了 valgrind ?-tool=tool_name program_name 比如我们要对Is -I命令做内存检查,只需要执行下面的命令就可以了 valgrind ?-tool=memcheck Is -I 不管是使用哪个工具,valgrind在开始之前总会先取得对你的程序的控制权,从可执行 关联库里读取调试信息。然后在valgrind核心提供的虚拟CPU ±运行程序,valgrind会根 据选择的工具来处理代码,该工具会向代码中加入检测代码,并把这些代码作为最终代码返 回给valgrind核心,最后valgrind核心运行这些代码。 如果要检查内存泄漏,只需要增加-leak-check=yes就可以了,命令如下 valgrind ?-tool=memcheck ?-leak-check=yes Is -I 不同工具间加入的代码变化非常的大。在每个作用域的末尾,memcheck加入代码检 查每一片内存的访问和进行值计算,代码大小至少增加12倍,运行速度要比平时慢25到 50倍。 valgrind模拟程序中的每一条指令执行,因此,检查工具和剖析工具不仅仅是对你的应 用程序,还有对共享库,GNUC库,X的客户端库都起作用。 首先,在编译程序的时候打开调试模式(gcc编译器的?g选项)。如果没有调试信息, 即使最好的valgrind工具也将中能够猜测特定的代码是属于哪一个函数。打开调试选项进行 编译后再用valgrind检查,valgrind将会给你的个详细的报告,比如哪一行代码岀现了内存 泄漏。 当检查的是C++程序的时候,还应该考虑另一个选项-fno-inlineo它使得函数调用链很 清晰,这样可以减少你在浏览大型C++程序时的混乱。比如在使用这个选项的时候,用 memcheck检查openoffice就很容易。当然,你对能不会做这项工作,但是使用这一选项 使得valgrind生成更精确的错误报告和减少混乱。 一些编译优化选项(比如?02

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档