如何排除某些子进程在valgrind下运行?

时间:2010-02-23 09:37:07

标签: linux valgrind

我正在Linux中运行一个守护进程,我想在valgrind下运行这个守护进程来查找与内存相关的错误。由于它是一个守护进程,我需要使用--trace-children=yes选项,但是这会在以后的生命周期中生成许多进程,我不希望它们在valgrind下运行。有没有办法排除某些孩子在valgrind下运行?

1 个答案:

答案 0 :(得分:6)

当前发布的版本(valgrind 3.5.0)无法跟踪某些但不是所有子项。 但是,如果您愿意使用the latest code from the SVN repository,则其中包含new option --trace-children-skip用于此目的:

  

--trace-children-skip=patt1,patt2

     
    

此选项仅在指定--trace-children=yes时生效。它允许跳过一些孩子。该选项采用逗号分隔的模式列表,用于Valgrind不应跟踪的子可执行文件的名称。模式可能包含元字符?*,它们具有通常的含义。

         

这对于从Valgrind上运行的进程树中修剪不感兴趣的分支非常有用。但是在使用它时你应该小心。当Valgrind跳过跟踪到可执行文件时,它不仅会跳过跟踪该可执行文件,还会跳过跟踪任何可执行文件的子进程。换句话说,该标志不仅仅导致跟踪停止在指定的可执行文件中 - 它会跳过以任何指定可执行文件为根的整个进程子树的跟踪。

  

较旧的方法是省略--trace-children=yes,对于您想要跟踪的子项,将其替换为在valgrind下运行实际程序的简单脚本:

#!/bin/sh
exec valgrind --log-file=myprog.vg.%p myprog-real "$@"

即使使用新选项,如果你有这样的脚本,这种脚本也很有用。你想在valgrind下追踪但想跳过它的父母的孙子。