Текущая версия (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, но хотите пропустить его родителя.