The Way of the great learning involves manifesting virtue, renovating the people, and abiding by the highest good.

2008年12月22日星期一

valgrind 内存调试

这段时间在对一个产品进行稳定性测试,让程序在Purify下运行,结果Purify最后出现了错误。同事告诉我有一款工具——valgrind,可以定位程序内存方面的错误,于是我下载下来,运行测试,效果很好,这个工具运行稳定,给出的结果也很清晰。 valgrind这款工具是运行在linux下的,可以用来定位c/c++程序中内存使用方面的错误。包括:内存泄漏、使用未初始化的内存、读/写已释放的内存、读/写内存越界、使用malloc/new/new[]和free/delete/delete[]不匹配,等等。 valgrind官方网站:http://valgrind.org/,是一款open source软件。我下载的时候最新版是3.2.3。安装过程很简单——configure,make,make install,安装后不需要任何设置,直接可以开始使用。 valgrind运行方法很简单:valgrind --leak-check=full --track-fds=yes 程序 参数 这样你的程序就会在valgrind监控下运行了,结果会直接输出到屏幕上。如果想把结果输出到日志文件(通常也需要这样),用如下的命令:valgrind --log-file=valgrind_log --leak-check=full --track-fds=yes 程序 参数 感谢我的同事肖锋,告诉我这款工具的信息。也感谢这款工具的开发者——Jonathan Riddell 。

*valgrind网站上的,骑士战恶龙
PS:说起Run-time错误定位工具,我最初使用的是Boundchecker,那还是在Visual c++ 6.0的时代,那款工具确实很好用,功能、性能都不错,但后来不知道Compuware公司出了什么问题,对这款工具的改进很少,到了MS .net出来以后,我试用过Boundchecker针对.net的版本,性能很差。后来是否再有更新我就不清楚了,因为再也没有使用过Compuware的产品。Purify是现在的公司使用的Run-time错误定位工具,使用方法和Boundchecker非常类似(2002年的时候Compuware指控IBM错误分析器产品中使用自己拥有版权的代码,就是这款产品),也许是因为曾经使用过Boundchecker先入为主的原因,对这款工具始终感觉不是很好,在这次测试过程中,Purify自己竟然宕了。使用过valgrind后,我查了关于它的一些资料,这款工具已经有很多人在使用了,也得过不少殊荣,评价很好。遇到相同需求的朋友,倒是可以试一下valgrind这款工具!

没有评论: