Отладка утечки памяти: игнорировать ложные срабатывания (Visual Studio) - PullRequest
1 голос
/ 16 апреля 2019

Я могу разбить отчет об утечке памяти Visual Studio на ложные срабатывания и реальные утечки памяти. В своей основной функции я инициализирую отладку памяти и вырабатываю реальную утечку памяти в самом начале моего приложения (никогда не удаляйте pcDynamicHeapStart):

int main()
{   
   _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
   char* pcDynamicHeapStart = new char[ 17u ];
   strcpy_s( pcDynamicHeapStart, 17u, "DynamicHeapStart" );

   ...

После того, как мое приложение будет завершено,отчет в окне вывода содержит:

Detected memory leaks!
Dumping objects ->
{15554} normal block at 0x00000000009FCCD0, 80 bytes long.
Data: <                > DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD
{14006} normal block at 0x00000000009CB360, 17 bytes long.
Data: <DynamicHeapStart> 44 79 6E 61 6D 69 63 48 65 61 70 53 74 61 72 74 
{13998} normal block at 0x00000000009BF4B0, 32 bytes long.
Data: < ^              > E0 5E 9B 00 00 00 00 00 F0 7F 9C 00 00 00 00 00 
{13997} normal block at 0x00000000009CA4B0, 8 bytes long.
Data: <        > 14 00 00 00 00 00 00 00 
{13982} normal block at 0x00000000009A12C0, 16 bytes long.
Data: <   @            > D0 DD D6 40 01 00 00 00 90 08 9C 00 00 00 00 00

...

Object dump complete.

Теперь посмотрите на строку «Данные: <<strong> DynamicHeapStart > 44 79 6E 61 6D 69 63 48 65 61 70 53 74 61 72 74».

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

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

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

Может быть, есть возможность игнорировать первые n утечек или начать создавать отчеты после определенного идентификатора?Если это так, номер или Id можно скорректировать время от времени в качестве первого подхода.

...