【问题标题】:c++ - Valgrind on codeblocks (linux)c++ - 代码块上的 Valgrind (linux)
【发布时间】:2018-01-08 04:06:27
【问题描述】:

我已经在小程序中使用Valgrind 来检查memorys leaks 并且它的工作良好。

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

我将linuxcodeblocks 16.01gcc 一起使用,我试图在codeblocks 中直接运行Valgrind,但出现以下错误:

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

如果我用一个只有.cpp 文件和主文件的小项目进行测试,它运行良好,Valgrind 生成ValgrindOut.xml。在这个大项目中,我总是遇到这个错误。有人知道出了什么问题吗?或其他方式或工具来测试memory leak

编辑 - 运行 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.

【问题讨论】:

  • 请说明你是如何运行它的,你在哪里得到这个错误?
  • 我直接在代码块中运行。顶部菜单栏 -> valgrind -> 运行 memcheck 并且错误出现在 valgrind 'console' 输出的代码块中
  • 你可以直接从 linux shell 运行它吗?这似乎是一个密码锁(无论是什么)问题。
  • 我从未在 linux shell 中运行 Valgrind。你知道怎么跑吗?
  • 是否应该已经有一个 .xml 文件来写入输出?我只是在猜测,我没有在任何 IDE 中使用 valgrind。我总是在 shell 中运行 valgrind。

标签: c++ c linux memory-leaks codeblocks


【解决方案1】:

我不确定如何直接从代码块运行 valgrind。我建议您使用代码块构建您的项目。执行时,按照以下命令使用 valgrind。

命令

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

示例

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,其中包含内存泄漏等。

【讨论】:

  • 谢谢。它的真实帮助我。例如,它的含义是:1 个块中的 112 个字节在 38 的丢失记录 25 中间接丢失?我有很多与此相当的信息。
  • 这些是内存泄漏。您已经分配了一些内存,但从未释放。指向分配内存的指针被修改/覆盖,因此您将永远无法在程序执行的生命周期内释放它。因为我没有源代码,所以很难说到底哪里错了。
  • 谢谢。由于这个(我的新帖子)stackoverflow.com/questions/45441303/c-mysql-connector,我遇到了一些内存泄漏问题
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 2011-02-24
相关资源
最近更新 更多