Как я могу создавать дампы памяти и анализировать утечки памяти? - PullRequest
1 голос
/ 11 ноября 2009

Мне нужно получить следующее, чтобы проанализировать проблему утечки памяти. Как это сделать?

  • Адреса для сирот
  • Stack

Есть ли хорошие ресурсы / инструменты, которые нужно знать о / исправить утечки памяти.

Спасибо

Ответы [ 6 ]

6 голосов
/ 11 ноября 2009

Если вы используете Linux, используйте valgrind . Это твой новый лучший друг. Я не уверен, какие инструменты доступны для Windows.

2 голосов
/ 11 ноября 2009

Microsoft Application Verifier выполняет анализ памяти, аналогичный valgrind, если вы работаете на платформе Windows.

2 голосов
/ 11 ноября 2009

valgrind --leak-check = full

1 голос
/ 11 ноября 2009

В Windows вы можете использовать функцию MiniDumpWriteDump в dbghelp.dll.

Как создать минидамп для моего процесса при его сбое?

Это может быть очень полезно для отслеживания ошибок в развернутых приложениях, потому что вы можете использовать ваши символы отладки для проверки мини-дампов, сделанных в поле без информации отладки. Однако он не очень полезен для отслеживания утечек памяти.

Для утечек памяти под Windows (кроме коммерческих инструментов, таких как Purify , BoundsChecker и GlowCode , конечно) вы можете использовать WinDbg из бесплатного * 1017 Пакет средств отладки для Windows , а также теги кучи Win32 для отслеживания источника утечек памяти.

http://www.codeproject.com/KB/cpp/MemoryLeak.aspx

http://blogs.msdn.com/alikl/archive/2009/02/15/identifying-memory-leak-with-process-explorer-and-windbg.aspx

0 голосов
/ 26 сентября 2018

В Windows я смог получить необходимую информацию, используя UIforETW, который обрабатывает необходимые аргументы командной строки для xperf.

Этот пост в блоге объясняет все очень подробно: https://randomascii.wordpress.com/2015/04/27/etw-heap-tracingevery-allocation-recorded/


запись

Шаг 1. Создается запись реестра TracingFlags, для которой задано значение «1» в параметрах выполнения файла образа для каждого имени процесса, которое будет отслеживаться, чтобы указать кучи Windows настроить себя для отслеживания при запуске процесса с этим именем , Как всегда в случае с параметрами выполнения файла изображения, параметры не влияют на уже запущенные процессы - затрагиваются только процессы, запущенные, когда задан раздел реестра.

Шаг 2. Дополнительный сеанс ETW создается с помощью заклинания «-heap -Pids 0». В этом сеансе будет записана информация о процессах, для которых запись реестра TracingFlags была равна «1» при запуске.

Детали немного запутанные, но теперь, когда написан UIforETW, мне не нужно объяснять детали, и вам не нужно притворяться, что выслушиваете. Если вы хотите записать трассировку кучи, используйте UIforETW, и если вы хотите узнать, как она работает, посмотрите на код или нажмите кнопку Показать команды, чтобы увидеть большую часть грязного белья.

Анализ

Запись можно проверить с помощью WPA (Windows Performance Analyzer), который можно легко запустить из UIforETW.

Рекомендуются следующие столбцы: Process, Handle, Type, Stack.

Виды размещения:

  • AIFO - Выделенный внутри Freed снаружи (подсказка, подсказка)
  • AOFI - Выделенный снаружи Freed Inside
  • AOFO - Выделенный вне Freed вне
  • AIFI - выделенный внутри Freed Inside
0 голосов
/ 11 ноября 2009

Да, как прокомментировал Дж. Полетт, по крайней мере, на платформе Linux Valgrind является отличной отправной точкой.

...