如何告诉valgrind只关注特定的子进程?

时间:2016-08-25 23:14:24

标签: valgrind

我使用" - trace-children = yes"选项,我也使用" - trace-children-skip = patt1,patt2,..."选项(过滤掉噪音过程)。但对我来说它仍然很慢,我的多进程应用程序超时,并且" - trace-children-skip ="选项变得很长。
我需要像" - trace-children-only = patt1,patt2,..."选项,允许我指定要遵循的特定子进程。我找不到那样的东西。
如何告诉valgrind只关注特定的子进程?

1 个答案:

答案 0 :(得分:1)

当你在程序上启动valgrind时,子进程必然是必须的 "开始运行"在valgrind。 更确切地说,当父母开始孩子时,它将首先分叉。 真实的'使用valgrind时运行的可执行文件是valgrind本身。 因此,分支valgrind给出了valgrind和子进程的副本 必然"开始"在valgrind模式。 然后当孩子调用exec时,valgrind检查--trace-children * 决定执行执行程序的选项, 或者更确切地说是自己(valgrind)。

所以,如果你有一个启动子B的进程A,它会启动子C, valgrind无法仅为C激活。

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