2010-05-31 3 views
1

У меня есть процесс. Процесс вилки B. A и B - разные приложения. Оба скомпилированы с флагом -g.имена функций callgrind не показаны в дочерних процессах

, чтобы запустить его с callgrind я использую команду: Valgrind --tool = callgrind --trace-дети = да ./A [PARAMS]

callgrind.out.xxx для родительского процесса (A) содержит функцию имена. для дочернего процесса (B) - он не содержит. Что здесь может быть не так?

Благодаря

ответ

0

Вы пробовали с последней версией Valgrind?

только текущая проблема, которая кажется очевидной для меня:

... вы должны убедиться, что строка формата выходного файла (контролируется --callgrind-из-файла) не содержит % p (что верно по умолчанию). В противном случае выходы родительского и дочернего элементов будут переписываться друг с другом или будут перемешаны, что почти наверняка не то, что вы хотите.

извлечено из callgrind documentation.

+0

В этой документации также говорится, что для ребенка требуется специальный вызов ». * Если ваши программные вилки, ребенок наследует все данные профилирования, которые были собраны для родителя. Чтобы начать с пустых значений счетчика профиля в дочернем элементе, клиент запрос CALLGRIND_ZERO_STATS; может быть вставлен в код, который будет выполняться дочерним, непосредственно после fork. * ". Кроме того, процесс B - это другое приложение, запускаемое 'fork' +' exec', и нет документации о 'exec' – osgx

+0

. Стоит отметить, что если вы хотите, чтобы valgrind отслеживал дочерние процессы, запущенные с' '' fork + exec' '', вам также нужен флаг '' '--trace-children = yes'''. См. Страницу valgrind '' 'man''' для документации о' '' exec'''. – SullX

Смежные вопросы