Как проверить память программы-демона? - PullRequest
8 голосов
/ 14 февраля 2012

Я написал приложение на C ++, которое работает вечно, пока не завершится вручную. Он контролирует другие важные приложения. В результате мое приложение Daemon не должно закрываться. Имея это в виду, я хочу увидеть, есть ли утечки памяти в моем приложении. Я использовал valgrind, но так как это приложение работает вечно, valgrind не выходит. если я сделаю элемент управления - C, тогда я не получу полную информацию из лог-файла valgrind.

Есть ли инструмент, который может делать то, что делает Valgrind?

Ответы [ 3 ]

5 голосов
/ 14 февраля 2012

Полагаю, вы можете подключить gdb к работающему процессу valgrind и дать ему указание явно выполнить проверку на утечку.

Я не пробовал, просто видел в документах .

В случае обрыва ссылки:

Подключение GDB к gdbserver Valgrind

$ valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./prog

(параметр error - это количество ошибок до того, как gdbserver станет активным: ноль означает, что он сразу же начнет работать).

Затем запустите gdb в вашей программе и подключитесь к удаленной цели

$ gdb ./prog
(gdb) target remote | vgdb

и для запуска проверки

(gdb) monitor leak_check full reachable any

См. Ваши документы или связанные документы для получения полной информации.

4 голосов
/ 14 февраля 2012

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

В качестве альтернативы есть клиентские запросы valgrind VALGRIND_DO_LEAK_CHECK VALGRIND_DO_ADDED_LEAK_CHECK VALGRIND_DO_CHANGED_LEAK_CHECK, которые вы можете запустить в своем демоне, возможно, по таймеру. Тогда сравнение результатов может рассказать о любых утечках.

0 голосов
/ 14 февраля 2012

Вы не можете обнаружить утечки без выхода в какой-то момент.Я думаю, что вы можете использовать valgrind и сделать выход из демона, скажем, через 5 минут.Тогда Valgrind сообщит о ваших утечках.Имейте в виду, что если ваш демон постоянно выделяет память из-за логического недостатка в алгоритме, он все равно может исчерпать память без каких-либо утечек в коде.

...