设为首页 加入收藏

TOP

建议32:借助工具监测内存泄漏问题(2)
2013-10-07 14:48:09 来源: 作者: 【 】 浏览:76
Tags:建议 借助 工具 监测 内存 泄漏 问题

建议32:借助工具监测内存泄漏问题(2)

BoundsChecker采用的是一种被称为Code Injection的技术,来截获对分配内存和释放内存的函数的调用的。简单地说,当程序开始运行时,BoundsChecker的DLL被自动载入进程的地址空间中,然后它会修改进程中对内存分配和释放的函数调用,让这些调用首先转入它的代码,然后再执行原来的代码。BoundsChecker在做这些动作时,无须修改被调试程序的源代码或工程配置文件,这使得使用它非常简便、直接。而Insure++则是利用其专利技术(源码插装和运行时指针跟踪)来发现大量的内存操作错误,准确报告错误的源代码行和执行轨迹。

如果开发环境是Linux,MS C-Runtime Library内建检测功能就会彻底失效,BoundsChecker或Insure++也无能为力。这时,外挂式的检测工具Rational Purify或Valgrind便派上了用场。

Rational Purify主要是针对软件开发过程中难以发现的内存错误、运行时错误。它可以在软件开发过程中自动地发现错误,准确地定位错误,并提供完备的错误信息,从而减少调试时间。同时它也是市场上唯一支持多种平台的相关工具,并且可以和很多主流开发工具集成。Purify 可以检查应用的每一个模块,甚至可以查出复杂的多线程或进程应用中的错误。另外,它不仅可以检查 C/C++(www.cppentry.com),还可以对 Java 或 .NET 中的内存泄漏问题给出报告。

在 Linux 系统中,使用 Purify非常简单,只须重新编译程序:

  1. purify g++ -g main.cpp -o LeakDetector 

运行编译生成的可执行文件LeakDetector,就可以定位出内存泄漏的具体位置。

除了Rational Purify,Valgrind 也是Linux系统下开发应用程序时用于调试内存问题的有效工具。它尤其擅长发现内存管理的问题,检查发现程序运行时的内存泄漏。

至于上述这些外挂式检测工具的具体使用方法就不赘述了。

根据应用程序的具体情况,合理采用上述方法和工具,可以有效防止和查找代码中的内存泄漏问题,并且能和开发人员日常编码无缝结合,有效提高开发效率,增强应用程序鲁棒性。

请记住:

内存泄露是一个大问题,但是可以通过一定的方法或借助于专业的检测工具,来查找并发现这些问题,有效地提升程序员的开发效率。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇建议31:了解new_handler的所作所.. 下一篇建议32:借助工具监测内存泄漏问..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: