2013-03-01 1 views
3

У меня есть утечка памяти в моем коде. Куча продолжает увеличиваться с помощью триггера потока. В моем коде у меня есть цикл while (1), который в основном ждет очереди. , когда этот поток запускается из webservice, входящий msg помещается в очередь, и вызывается метод в C++, который принимает сообщение и реализует поток, который находится в форме графика.Как и когда valgrind обнаруживает утечки памяти

Для каждого триггера я нахожу 604kb памяти, увеличивающейся в куче. Мне нужно это решить.

Я остановил службу [бинарный запуск в prod].

Я начал службу с VALGRIND [дал двоичный файл в качестве входных данных Valgrind]

valgrind --log-file=/home/valgrind-output.txt --leak-check=full <service binary> 

Но в то время как двоичный работает он не показывает каких-либо утечек, только тогда, когда я остановить службу я вижу некоторые утечки. Но это однократные утечки и будут очищены после перезапуска службы. [Binary].

Я намеренно добавил выделение в начале процесса при каждом запуске каждого потока.

int *p = new int[10]; 

и добавил журнал also.I просмотра журнала печати каждый раз, когда я инициирующая flow.But я вижу Valgrind выигрыш дает каких-либо утечек в выходном файле.

Как я могу проверить утечки между каждым поточным вызовом? Действительно ли valgrind ботинок протекает только после того, как назван конец основного? Как проверить динамически то, что вызывает мой код в этом случае. Если есть какой-либо другой детектор, который мне нужно установить? Пожалуйста, предложите. Это было бы очень полезно. Спасибо.

ответ

-1

Использование -massif дает вам подробный вывод, в котором память распределяется со всем стеком вызовов.

+0

> Valgrind --log-файл =/дом/Valgrind-output.txt --leak проверка = полный --show достижимым = да -massif servicebinary Valgrind: Плохой вариант: -massif Valgrind: Использование - -help для получения дополнительной информации или обратитесь к руководству пользователя. – user862833

+0

--tool = massif также после создания файла журнала используйте ms_print massif.log> massifout.txt; –

+0

нет это не работает – user862833

1

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

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

+0

только когда я останавливаю службу, я вижу некоторые утечки. Но это однократные утечки и будут очищены после перезапуска службы. [Binary]. Iam не может отличить память от потери IAM во время цикла while (1). – user862833

+0

Возможно, вам следует реализовать команду дробления для службы - отправить что-то конкретное, чтобы закрыть ее явно. –

+0

Есть ли какой-нибудь способ в valgrind, где мы можем печатать каждое выделение, сделанное в куче? – user862833

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

  • Нет связанных вопросов^_^