C++ - 在Codeblocks(Linux)上使用Valgrind

5

我已经在小程序中使用过Valgrind来检查内存泄漏,效果不错。

现在我有一个包含许多类和.cpp.h文件的大型程序,我正在尝试使用Valgrind来检查内存泄漏,因为我使用了很多指针、内存等。

我正在使用linuxcodeblocks 16.01gcc,并尝试直接在codeblocks中运行Valgrind,但是我遇到了以下错误:

 --------------- Application output --------------
valgrind: /myPathToTheProject/ValgrindOut.xml: No such file or directory

如果我只测试一个只有一个.cpp文件和主函数的小项目,那么它工作得很好,并且Valgrind生成了ValgrindOut.xml。但在这个大项目中,我总是得到这个错误。有人知道出了什么问题吗?或者有其他的方法或工具来测试内存泄漏吗?
编辑 - 运行Valgrind后的泄漏摘要
Leak summary:

definitely lost: 673 bytes in 6 blocks.
   indirectly lost: 89,128 bytes in 68 blocks.
     possibly lost: 232 bytes in 2 blocks.
   still reachable: 80,944 bytes in 6 blocks.
        suppressed: 0 bytes in 0 blocks.

请解释一下你是如何运行它的,以及你在哪里遇到了这个错误? - user7860670
我正在CodeBlocks中直接运行。顶部菜单栏->valgrind->运行memcheck,错误将在valgrind“控制台”输出中出现。 - RMRMaster
是否应该有一个 .xml 文件来写输出?我只是猜测,我没有在任何 IDE 中使用 valgrind。我总是在 shell 中运行 valgrind。 - user1801517
@RMRMaster 要从 shell 中运行 valgrind,您只需键入“valgrind <executable>”,其中<executable>是您的可执行文件的名称。就这么简单。 - h0r53
如果我终止程序,valgrind会在shell中显示测试结果。请查看编辑并检查LEAK SUMMARY。这是什么意思?你能帮我吗? - RMRMaster
显示剩余4条评论
1个回答

1

我不确定如何在Codeblocks中直接运行Valgrind。建议您使用Codeblocks构建项目。执行时,请按照以下命令使用Valgrind。

命令

valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --log-file=leak.txt ./myexecutable <my command line arguments>

Example

valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --log-file=leak.txt ./myexecutable -i 192.168.1.10 -p 5000

这样你就可以生成valgrind输出文件,即leak.txt,其中包含内存泄漏等信息。

谢谢。这真的帮了我很多。例如,它是什么意思:在38个丢失记录中的第25个记录中间,1个块中间丢失了112个字节?我有很多类似的消息。 - RMRMaster
这些是内存泄漏。您已经分配了一些内存,但从未释放。指向分配的内存的指针被修改/覆盖,因此在程序执行期间您将永远无法释放它。由于我没有源代码,很难确定出错的具体原因。 - Austin
谢谢。我因为这个问题(我的新帖子)遇到了一些内存泄漏的问题。https://stackoverflow.com/questions/45441303/c-mysql-connector - RMRMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接