Как исключить определенные дочерние процессы для запуска под valgrind? - PullRequest
7 голосов
/ 23 февраля 2010

Я работаю с демоном в Linux и хочу запустить этого демона под valgrind, чтобы найти ошибки, связанные с памятью. Поскольку это демон, мне нужно использовать опцию --trace-children=yes, но это порождает многие процессы позже в течение его жизни, и я не хочу, чтобы они запускались под valgrind. Есть ли способ запретить некоторым детям бегать под вальгриндом?

1 Ответ

6 голосов
/ 23 февраля 2010

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

...