【问题标题】:How to get more information from valgrind?如何从 valgrind 获取更多信息?
【发布时间】:2018-06-29 22:09:39
【问题描述】:

我正在使用以下命令运行 valgrind:

valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes
--max-stackframe=10485760 --log-file=valgrind_output.txt ./MyPrg

我已经用符号构建了我的可执行文件。

输出包括:

==30169== HEAP SUMMARY:
==30169==     in use at exit: 72,704 bytes in 1 blocks
==30169==   total heap usage: 688,466 allocs, 688,465 frees, 622,080,633 bytes
allocated
==30169== 
==30169== 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1
==30169==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/
vgpreload_memcheck-amd64-linux.so)
==30169==    by 0x4EC3EFF: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21)
==30169==    by 0x40106B9: call_init.part.0 (dl-init.c:72)
==30169==    by 0x40107CA: call_init (dl-init.c:30)
==30169==    by 0x40107CA: _dl_init (dl-init.c:120)
==30169==    by 0x4000C69: ??? (in /lib/x86_64-linux-gnu/ld-2.23.so)
==30169==    by 0x5: ???
==30169==    by 0xFFF000242: ???
==30169==    by 0xFFF000247: ???
==30169==    by 0xFFF00024A: ???
==30169==    by 0xFFF00024C: ???
==30169==    by 0xFFF00024F: ???
==30169==    by 0xFFF000252: ???
==30169== 
==30169== LEAK SUMMARY:
==30169==    definitely lost: 0 bytes in 0 blocks
==30169==    indirectly lost: 0 bytes in 0 blocks
==30169==      possibly lost: 0 bytes in 0 blocks
==30169==    still reachable: 72,704 bytes in 1 blocks
==30169==         suppressed: 0 bytes in 0 blocks

如何获得更多信息以找出与此可访问块相关的变量?

更新 1

看起来其他人得到了相同的输出:https://bugs.archlinux.org/task/45051

我使用的是 Linux Mint 18.1。

更新 2

使用 gdb 我得到输出:

[Inferior 1 (process 15499) exited normally]

【问题讨论】:

  • MyPrg 是如何编译的?
  • 在带有 -std=c++11、-Wall 和 -g 的 Code::Blocks 中。
  • 如果你尝试在 gdb 中运行程序,你会得到类似的输出吗?
  • 参见上面的“更新 2”!
  • 你使用的是哪个版本的 Valgrind?

标签: c++ codeblocks valgrind linux-mint


【解决方案1】:

警告指向dl-init.c第72行中的分配:

==30169==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==30169==    by 0x4EC3EFF: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21)
// --- start of your code ---
==30169==    by 0x40106B9: call_init.part.0 (dl-init.c:72)
==30169==    by 0x40107CA: call_init (dl-init.c:30)
==30169==    by 0x40107CA: _dl_init (dl-init.c:120)

我不认为,这是您的代码中的问题,而是动态库加载器的问题。有关详细信息,请参阅此答案:c++ valgrind shows memory leak in hello world

根据bug report,它已在 gcc 6 中修复。当我使用 gcc 7.2.1 和 clang 5.0.1 进行测试时,我也没有收到 valgrind 警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多