Анализ утечки памяти - PullRequest
       20

Анализ утечки памяти

1 голос
/ 13 ноября 2009
  1. В моем приложении произошла утечка памяти. Потребление памяти возрастает после нескольких дней работы приложения. Мне нужно сбросить информацию стека вызовов каждого адреса потерянного блока. Как это возможно с WinDbg?

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

Ответы [ 5 ]

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

Вы можете использовать umdh.exe для захвата и сравнения снимков процесса до и после утечки. Это лучше всего работает с отладочными двоичными файлами - это даст вам стеки памяти, выделенные между 1-м и 2-м снимками.

http://support.microsoft.com/kb/268343

0 голосов
/ 13 ноября 2009

Для утечек я использовал Visual Leak Detector , хотя он работает только в режиме отладки, он бесплатный и кажется достаточно надежным

0 голосов
/ 13 ноября 2009

Я никогда не использовал Memory Validator (http://www.softwareverify.com/cpp/memory/index.html) до вчерашнего дня, но это помогло мне отследить что-то сегодня.

0 голосов
/ 13 ноября 2009

Прежде всего я должен сказать, что вы должны быть мазохистом, чтобы использовать WinDbg! Если вы пишете код на C ++, вы не разрабатываете драйверы, даже в этом случае есть более достойные отладчики. Выбрось это дерьмо, правда!

Чтобы решить эту проблему, я бы сначала использовал статическую проверку кода для анализа кода. PC-Lint - дешевый. Затем запустите приложение в динамической проверке кода (например, Boundschecker или Purify).

Только если бы вы не смогли найти код преступника, я бы начал там, где вы находитесь. Инвестирование в такой инструмент действительно стоит денег, если вы пишете приложения, которые должны работать дни и дни. Он позволяет быстрее проверить код (не на 100%) перед тем, как начинать длительные тесты, чтобы выяснить, что бы программа проверки кода нашла в течение нескольких минут ...

С Boundchecker вы можете использовать Marks, он использует аналогичную функцию (или, может быть, точно такую ​​же?), О которой рассказывает Стив Таунсенд. С его помощью вы увидите все блоки памяти, все еще сохраняющиеся в памяти со времени последней отметки. Это довольно утомительно в больших приложениях, так как в итоге вы получаете большой бак блоков памяти ... Но если вы задали этот вопрос, то вы, вероятно, уже настолько отчаялись, что хотели бы попробовать его; -)

0 голосов
/ 13 ноября 2009
  1. См. Запись «Кто вызвал HeapAlloc» на этой странице: http://www.windbg.info/doc/1-common-cmds.html

  2. См. Эту страницу: http://www.microsoft.com/whdc/DevTools/Debugging/debugstart.mspx для получения информации о сервере символов.

...