gpt4 book ai didi

valgrind - valgrind 可以在不退出分析应用程序的情况下输出部分报告吗?

转载 作者:行者123 更新时间:2023-12-01 19:30:29 34 4
gpt4 key购买 nike

我想使用 valgrind 检查长时间运行的进程是否存在内存泄漏。我怀疑我所追求的内存泄漏可能仅在执行几个小时后才会发生。我可以在 valgrind 下运行应用程序并获取 valgrind 日志,但这样做意味着我必须退出应用程序并重新启动它以进行新的 valgrind session ,而我仍然需要等待几个小时。是否可以保持 valgrind 和应用程序运行,并且在执行期间的任何时候仍然获取 valgrind 的(部分)数据?

最佳答案

您可以使用Valgrind gdbserver and GDB来做到这一点.

简而言之,您像往常一样使用 valgrind 启动程序,但使用 --vgdb=yes 开关:

$ valgrind --tool=memcheck --vgdb=yes ./a.out 

在另一个 session 中,您在同一可执行文件上启动 gdb,并连接到 valgrind。然后您可以发出 valgrind 命令:

$ gdb ./a.out
...
(gdb) target remote | vgdb
....
(gdb) monitor leak_check full reachable any
==8677== 32 bytes in 1 blocks are definitely lost in loss record 1 of 2
==8677== at 0x4C28E3D: malloc (vg_replace_malloc.c:263)
==8677== by 0x400591: foo (in /home/me/tmp/a.out)
==8677== by 0x4005A7: main (in /home/me/tmp/a.out)
==8677==
==8677== 32 bytes in 1 blocks are definitely lost in loss record 2 of 2
==8677== at 0x4C28E3D: malloc (vg_replace_malloc.c:263)
==8677== by 0x400591: foo (in /home/me/tmp/a.out)
==8677== by 0x4005AC: main (in /home/me/tmp/a.out)
==8677==
==8677== LEAK SUMMARY:
==8677== definitely lost: 64 bytes in 2 blocks
==8677== indirectly lost: 0 bytes in 0 blocks
==8677== possibly lost: 0 bytes in 0 blocks
==8677== still reachable: 0 bytes in 0 blocks
==8677== suppressed: 0 bytes in 0 blocks
==8677==
(gdb)

请参阅手册以获取命令列表,here用于内存检查。

关于valgrind - valgrind 可以在不退出分析应用程序的情况下输出部分报告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9720632/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com