2016-08-25 5 views
1

Я использовал опцию «--trace-дети = да», я также использовал «--trace-дети пропуск = patt1, patt2, ...» вариант (отфильтровать процессы шума). Но для меня все еще очень медленно, мое многопроцессорное приложение отключается, а опция «--trace-children-skip =» становится очень длинной.
Мне нужно что-то вроде опции «--trace-children-only = patt1, patt2, ...», которая позволит мне указать конкретный дочерний процесс для последующего. Я не могу найти ничего подобного.
Как сказать valgrind следовать только конкретному процессу ребенка?Как сказать valgrind следовать только конкретному процессу ребенка?

ответ

1

Когда вы начинаете valgrind в программе, дочерние процессы обязательно должны «начать работать» под valgrind. Точнее, когда родитель запускает дочерний элемент, он будет первым fork. «Настоящий» исполняемый файл, который работает при использовании valgrind, является самой valgrind. Итак, forking valgrind дает копию valgrind, а дочерний процесс обязательно «запускается» в режиме valgrind. Затем, когда ребенок называет EXEC, Valgrind проверяет --trace-детей * варианты, чтобы решить, либо EXEC программу Exec-е изд, или, вернее, EXEC себя (Valgrind).

Так что, если у вас есть процесс А, который запускает ребенка B, который запускает дочерний C, нет никакого способа для Valgrind быть активирован только для C.

Решение поместить в PATH A C скрипт, который скрывает реальный исполняемый файл C . В этом сценарии, сделать что-то вроде: Valgrind ... Valgrind арг .../путь/к// реальный/C .... C арг ... (конечно C арг может быть выздоровел из аргументов скрипта).