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

2023-11-26

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


您可以通过使用来做到这一点Valgrind gdbserver 和 GDB.

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

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

在另一个会话中,您在同一可执行文件上启动 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用于内存检查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Valgrind 调试日志:大小 8 的读取无效

    最近我决定使用 valgrind 调试我的应用程序 我已经解决了很多错误 但这个不能 12205 Invalid read of size 8 12205 at 0x37E1864C40 std Rb tree increment std
  • Valgrind/R 无法工作:“致命错误:无法创建 'R_TempDir'”

    首先 我对这些东西不太熟练 所以我可能会写一些愚蠢的问题 请友善 我有一个调用 C 代码的 R 代码 不幸的是 我的代码有问题 可能是内存未映射 我想使用 valgrind 尝试了解错误所在 几年前我已经使用过它 但现在似乎不起作用 当我午
  • std::线程问题

    我想我有一个非常糟糕的概念问题 为什么我使用 valgrind 时会遇到很多竞争条件错误 首先我认为这可能是一个错误 我在论坛中看到更新的 Linux 滚动版本将解决这个问题 所以现在我有 opensuse tubeleweed 100 更
  • 改变函数中指针的值

    我想更改函数中变量的值 我的代码是这样的 void change char buf char str xxxxxxx buf str int main char xxx NULL change xxx 当我用 valgrind 调试时 它说
  • 如何使用 valgrind 启动 Android 应用程序

    上周我一直在寻找这个问题的答案 如何使用 valgrind 启动 Android 应用程序 我知道我可以使用 am 命令启动应用程序 但它会启动应用程序并退出 我正在编写一个使用 NDK 执行本机 C 代码的应用程序 我需要检查它是否存在可
  • 地址 0x0 未被堆栈、分配或(最近)释放

    我对 C 很陌生 似乎无法弄清楚以下代码有什么问题 int main char filen file txt FILE file fopen filen r if file NULL char line 128 while fgets li
  • 使用 valgrind 检查 fftw3

    在我的程序的一个步骤中 我需要对图像进行卷积 为此 我正在使用提供的功能fftw3 当我跑步时valgrind在我的程序中 我得到了这个堆栈跟踪 我的函数叫做convolve它运行fftw3 s fftw plan dft r2c 2d两次
  • Ubuntu:valgrind:无法启动平台“amd64-linux”的工具“memcheck”:没有这样的文件或目录

    我已经安装了 valgrind 没有任何问题 但运行它时 我不断收到以下错误 valgrind failed to start tool memcheck for platform amd64 linux No such file or d
  • 如何学习 C 调试和最佳实践 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我用 C 语言编写了一个 Apache 模块 在某些条件下 我可以让它出现段错误 但我不知道为什么 此时 它可能是我的代码 可能是我编
  • valgrind --trace-children=yes 报告泄漏,尽管 atexit 清理

    我试图避免 valgrind 的误报 但我对以下组合感到很糟糕atexit and fork 尽管使用 trace children yes 我的代码 include
  • 使用 Open MPI 运行并行程序时出现分段错误

    在我之前的文章中 我需要在 10 台计算机之间分发 pgm 文件的数据 在 Jonathan Dursi 和 Shawn Chin 的帮助下 我集成了代码 我可以编译我的程序 但出现分段错误 我跑了 但什么也没发生 mpirun np 10
  • 最长公共子序列:为什么这是错误的?

    int lcs char A char B int m strlen A int n strlen B int X malloc m sizeof int int Y malloc n sizeof int int i int j for
  • Valgrind 和 CUDA:报告的泄漏是真的吗?

    我的应用程序中有一个非常简单的 CUDA 组件 Valgrind 报告了大量泄漏和仍然可达的情况 所有这些都与 cudaMalloc 调用有关 这些泄露是真的吗 我打电话cudaFree对于每一个cudaMalloc 这是 valgrind
  • 无效异常展开导致崩溃?

    我正在调试我们的一项测试中发生的崩溃 我们有一个用 C 编写的 ODBC 驱动程序 so 正在使用我们的测试工具 称为 Touchstone 通过 iODBC 对其进行测试 该工具也是用 C 编写的 我已使用 Oracle Solaris
  • C++ 程序在执行 std::string 分配时总是崩溃

    我一直在尝试调试崩溃的应用程序中的崩溃 即断言 检测到 glibc free 无效指针 0x000000000070f0c0 当我尝试对字符串进行简单分配时 请注意 我正在使用 gcc 4 2 4 的 Linux 系统上进行编译 优化级别设
  • 使用 Visual Studio 查找 C++ 应用程序中的内存泄漏

    在Linux中 我一直使用valgrind来检查应用程序中是否存在内存泄漏 Windows 中的等效项是什么 这可以用 Visual Studio 2010 来完成吗 Visual Studio 2019 有一个不错的内存分析工具 它可以在
  • 尝试添加到链接列表时,Valgrind 无限循环“信号 11 被丢弃”

    我正在尝试用 C 创建一个简单的单链表 并且在 Valgrind 中运行程序时遇到无限的 Singal 11 被删除 循环 我的 h 文件 ifndef TEST H define TEST H struct fruit char name
  • 使用无效命令进行 fork 会导致 valgrind 中的内存泄漏

    我有以下代码 它在分叉内执行无效命令 以下代码在 valgrind 中返回内存泄漏 include
  • valgrind 是如何工作的?

    有人可以快速解释 Valgrind 的工作原理吗 举个例子 它如何知道内存何时被分配和释放 Valgrind 基本上在 沙箱 中运行您的应用程序 在此沙箱中运行时 它能够插入自己的指令来进行高级调试和分析 从手册中 然后 您的程序将在 Va
  • 大小为 8 的无效写入,C Valgrind,字符串数组

    我一直在使用 valgrind 和 gdb 但我不太明白问题是什么 它跳来跳去太多了 我无法在 gdb 中真正追踪它 而在 valgrind 中我没有足够的信息 这是我的 makeargv 函数 它将 strtok 输出的字符串放入数组中

随机推荐