2012-06-11 5 views
0

Я пытаюсь написать плагин для демона, и сейчас я нахожусь на последних этапах. Поэтому я думал о mtrace, чтобы искать утечки памяти, так как я не вижу возможности запуска экземпляра valgrind (я не запускаю фактический демон, я запускаю процесс запуска, который проверяет некоторые файлы конфигурации, и после этого запускает демон).Точность mtrace

Итак, поскольку я просматриваю журналы от mtrace, я вижу очень очень неточную информацию. Например, это говорит о том, что index += UNIT - это выделение памяти, которое никогда не освобождается, и много подобных материалов.

Я бегу следующую команду для mtrace:

mtrace ./a.out memory > raw.log; cat raw.log | tr -s " " " " | cut -d" " -f4 > err.log; cat err.log | addr2line -e a.out > fin.log

Любые идеи о том, почему я получаю совершенно не полезный вывод?

P.S .: a.out скомпилирован со всеми отладочных флагов

ответ

1

Я считаю, что проблема с addr2line.
Вы должны попытаться прочитать оригинал raw.log и посмотреть, имеет ли он смысл.
Возьмите одно подозрительное выделение, найдите его в необработанном журнале, запустите objdump -lrd a.out и найдите конвейер. Это должен быть звонок malloc. Если это ошибка с addr2line, если это не так, неисправность составляет mtrace.

Некоторые возможные подводные камни:
1. Сборка a.out без -g.
2. Запуск одного a.out и предоставление другого a.out по addr2line.
3. Поиск номера строки, которую вы получили в неправильной версии источника.

P.S. У вас нет чего-то вроде #define UNIT (malloc(1000),7), не так ли?

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