модульный тест утечки памяти c ++ - PullRequest
5 голосов
/ 24 августа 2010

Я только что устранил утечку памяти в своем приложении, и теперь я хочу написать модульный тест, чтобы убедиться, что это больше не повторится.

Я ищу способ определения использования памяти текущим приложением (рабочим набором) до и после некоторых функций.

Например:

long mem_used= GetMemUsed(); 
/* Do some work */
/* clean up */

if( mem_used != GetMemUsed() ) {
    Error( "Memory leek" ); 
}

Я нашел множество способов обнаружить использование памяти во всей системе, но ни одного для текущего приложения.

Предложения, ссылки, фрагменты кода?

Ответы [ 6 ]

6 голосов
/ 24 августа 2010

Boost.Test автоматически сообщит вам в конце тестового прогона, если какой-либо из ваших модулей тестирует утечку памяти.

Я не знаю, предоставляют ли какие-либо другие платформы модульного тестирования C ++ такую ​​функциональность.

5 голосов
/ 24 августа 2010

Мне действительно нравится ValGrind для такого рода вещей.Эти инструменты уже существуют;вам не нужно писать свои собственные модульные тесты для обнаружения утечек памяти.

3 голосов
/ 25 августа 2010

Для Linux или других систем, использующих GLibC, есть функции для получения статистики распределения памяти. При условии отсутствия отложенных выделений у вас должна быть одинаковая память, выделенная для malloc до и после выполнения теста.

3 голосов
/ 24 августа 2010

Это не модульный тест.Если вы хотите убедиться, что какой-то блок, который должен управлять ресурсом, не утечет этот ресурс, вам нужно проверить, что ресурс, которым он управляет, удаляется в правильное время.Вы можете сделать это с фиктивными объектами, которые увеличивают счетчик при построении и уменьшают при удалении ... затем убедитесь, что счетчик правильный.

Тест, который проверяет использование памяти всего приложения, не является чем-то длямодульный тест.Модульные тесты предназначены для отдельных модулей в приложении.

0 голосов
/ 28 октября 2016

Вы также можете использовать Google Test Framework (gtest), а затем использовать инструменты производительности Google (gperf) для поиска утечек. GPerf вставляет в библиотеку заменяющую память, и если после завершения тестового прогона будет обнаружена утечка памяти, она сообщит вам об этом и даст команду pprof для запуска с несколькими различными форматами вывода - текст, точка, веб и т. Д. Этот инструмент найти утечки как в тестах, так и в рабочем коде.

Я также использую Valgrind для подтверждения наличия утечки при сомнении, но предпочитаю gperf. Одна проблема заключается в том, что если вы скомпилировали библиотеку памяти gperf и попытались использовать Valgrind, она не обнаружит каких-либо проблем, потому что она улавливает утечки, поэтому вам нужно очистить компиляцию между переключениями или иметь вторую копию проект.

0 голосов
/ 24 августа 2010

ProcessExplorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) хорошо подходит для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...