我如何在不通过 valgrind 命令选项启动它的情况下对每个 Process 实例进行 valgrind memcheck

3 valgrind memcheck

如何在不通过 valgrind 命令选项启动它的情况下对 Process 的每个实例进行 valgrind memcheck。

有没有办法将监控选项保存在进程中,而不是每次都使用 valgrind 命令启动进程?

在 Microsoft Application Verifier 中,如果指定要监视某个应用程序,则该应用程序的任意数量的实例都会受到监视,无论其是子进程还是以其他方式启动。

有什么想法可以在 Valgrind 中做同样的事情吗?

我已经尝试了 valgrind memcheck 的 --trace-children=yes 选项......但我的应用程序 xyz 向另一个应用程序 zzz 发出信号以启动一个新的 xyz(process) 实例,我想分析它。在这种情况下,valgrind 在 xyz 完成 zzz 信号时退出。它没有跟进 zzz 启动的进程。

谢谢,维杰

Aid*_*ell 5

IIRC,Valgrind 必须执行应用程序,因为它会更改只读符号以替换诸如等的常见库函数malloc

这意味着你不能将 memcheck 附加到一个已经运行的进程,因为它不能改变内存中程序的那部分(并且它可能会破坏运行状态)。

可能还有其他原因。一个快速谷歌暗示你可以不重视MEMCHECK到正在运行的进程了。按照建议,您可以将可执行文件包装在 bash 脚本中,例如。因此,如果程序myprog创建了新进程,newprog则执行以下操作:

]$ mv /path/to/myprog /path/to/newprog
Run Code Online (Sandbox Code Playgroud)

然后

#!/bin/bash
valgrind (options) /path/to/newprog $@
Run Code Online (Sandbox Code Playgroud)

并将其myprog称为$@确保传递参数。然后当你的程序创建一个新进程时,使用myprog -a b -c dthen 它被包装在 valgrind 中。

这仅适用于某些 C 调用execve()等,而其他创建进程的晦涩方法可能无法利用包装。

如果我错了,知道这将是一件好事:)