如何告诉 valgrind 只遵循特定的子进程?

How to tell valgrind to follow only a particular child process?

我使用了“--trace-children=yes”选项,我还使用了“--trace-children-skip=patt1,patt2,...”选项(过滤掉噪声过程)。但它对我来说仍然很慢,我的多进程应用程序超时,并且“--trace-children-skip=”选项变得很长。
我需要类似“--trace-children-only=patt1,patt2,...”的选项,它允许我指定要遵循的特定子进程。我找不到类似的东西。
如何告诉 valgrind 只跟随一个特定的子进程?

当您在程序上启动 valgrind 时,child 进程必须 "start to run" 在 valgrind 下。 更准确地说,当一个 parent 开始一个 child 时,它会首先分叉。 使用 valgrind 时 'real' 可执行文件 运行 是 valgrind 本身。 因此,分叉 valgrind 会得到 valgrind 的副本,并且 child 过程 在 valgrind 模式下必须 "starts"。 然后当 child 调用 exec 时,valgrind 检查 --trace-children* 决定执行 exec-ed 程序的选项, 或者更确切地说是执行本身(valgrind)。

所以,如果你有一个启动 child B 的进程 A,它启动 child C, 没有办法只为 C 激活 valgrind。

解决办法是在 PATH 中放入一个隐藏真正 C 的 C 脚本 可执行。在此脚本中,执行以下操作: valgrind ... valgrind args ... /path/to/the/real/C .... C args ... (当然 C args 可以从脚本参数中恢复)。