Как профилировать и фиксировать двойное удаление и повреждение памяти в c ++ - PullRequest
3 голосов
/ 13 мая 2010

У меня есть приложение, которое я скомпилировал с VS 2008 на Windows 7 с C ++ И я получил исключение, я пытался поймать это, я создал файл pdb (потому что я скомпилировал в релизе) и увидеть часть стека, но это не дает мне подсказки о том, где ошибка. Я ищу бесплатные способы получить эту ошибку. Можете ли вы порекомендовать бесплатные способы сделать это?

1 Ответ

4 голосов
/ 13 мая 2010

Visual C ++ имеет довольно хорошие встроенные инструменты отладки памяти C.

См. #define _CRTDBG_MAP_ALLOC или прочитайте: Кучи отладки CRT и Включение обнаружения утечки памяти .

Он может обнаружить:

  • Утечки памяти
  • Двойное удаление
  • Запись только за пределами выделенной памяти

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

Существуют также коммерческие инструменты, такие как BoundsChecker, HeapAgent и Purify, и бесплатные инструменты, такие как Fortify, и, конечно, вы можете свернуть свои собственные, но вы можете проделать долгий путь со встроенным VisualStudio.

...