7

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

4

1 回答 1

6

当前发布的版本(valgrind 3.5.0)没有选项可以跟踪一些但不是所有的孩子。但是,如果您愿意使用SVN 存储库中的最新代码,它包含一个用于此目的的新选项: --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 下跟踪但想跳过其父级,这种脚本也会很有用。

于 2010-02-23T16:20:00.103 回答