随着测试的进一步深入,我觉得问题开始出现在内存分配等等细节。于是去网上搜有没有什么自动测试内存泄漏的工具,因为在Visual C++的环境里,我曾经获得过这样的工具。结果还真的有,而且更好。这个工具叫valgrind。它的官方网站是http://valgrind.org/,现在的最高版本3.3.0。不过我并没有安装,因为Fedora7原来已经安装了valgrind3.2.3,已经够用了。
这个软件有很多的参数可选。直接将执行文件提供给这个软件,他就会通过运行这个软件,测试软件中所有的内存泄漏。最特殊的好处是,它可以识别gcc的-g选项加载入执行文件的调试信息,直接报出源文件的哪一行可能产生内存泄漏。而且它会以可能产生和已经产生的方式报告内存泄漏。全面程度超乎我的想象,有些报告我根本无法判别为何出现内存泄漏。也许是我对C++的理解还不够,毕竟以前都是编标准C。
在Visual C++,无论是VC6还是.net环境,也有一个小插件可以使用。以前在调试多线程的时候用过,还是不错的。这个叫vld(Virtual Leak Detector),网站是http://www.codeproject.com/KB/applications/visualleakdetector.aspx。只需要加载一个头文件和动态链接库,就可以在调试报告中拿到所有没有释放的内存信息,包括内存区大小,块数,内容等等。不过不能报告是在哪里出现了问题。

