Есть ли простой отладчик памяти для Windows, который (а) свободен и (б) работает? - PullRequest
4 голосов
/ 04 ноября 2011

Я пытался отладить небольшую проблему с памятью в большом проекте. Это были недели, и я до сих пор не смог найти его. Моя программа аварийно завершает работу после определенного периода времени. В результате я пытался получить что-то вроде отладчика памяти. Вот варианты, которые я рассмотрел / попробовал:

  • IBM Purify - успешно обнаруживает утечку памяти, но просит меня заплатить деньги, чтобы выяснить, где она находится
  • Valgrind - я слышал хорошие новости об этой программе, но она для Linux, и мне пришлось бы перенести весь свой проект на
  • MPatrol - опять же в основном для Linux. Версия для Windows предназначена для MingGW, и я использую Visual Studio. Я нашел бинарные файлы для VC ++ онлайн и следовал там инструкциям, но программа отказалась выводить какие-либо файлы журналов.
  • Application Verifier - генерирует случайную точку останова при запуске, запрашивает несуществующий исходный файл (sdk.cpp) в Visual Studio, а затем выдает эту ошибку каждый раз, независимо от того, к какому файлу я прикрепляю exe: «Доступ с первого шанса» нарушение для текущей трассировки стека "
  • WinDbg - я даже не знаю, делает ли эта программа то, что я думаю. Всегда выдает «ОШИБКА: файл символов не найден». И, похоже, ничего не делает, когда я запускаю свой exe.

Я искал все эти ошибки в Google несколько часов, но безрезультатно. Соответствующая документация по этим пакетам не содержит информации по моим конкретным вопросам. Есть ли отладчик, который работает? Мне действительно нужно перенести мою программу на Linux? Может кто-нибудь указать мне в направлении хорошей документации относительно отладки памяти? Любая помощь будет принята с благодарностью. Заранее спасибо!

Edit:

Спасибо за все ответы. Я понимаю, что проблема сбоев, вероятно, не утечка памяти. Через некоторое время он просто зависает. Там нет сообщения об ошибке. Обычно это происходит во время записи в cout. Таким образом, я решил, что это какая-то порча памяти. Думаю, я рассмотрю более глубокие возможности визуальной студии. На самом деле, используя пробную версию Purify, я нашел несколько ошибок, но я не хочу выкладывать 1600 долларов за полную версию. В худшем случае я перенесу его на Linux. Еще раз спасибо за помощь.

Редактировать 2:

После еще одного тестирования с Purify оказалось, что в моей программе больше нет ошибок памяти. Я заметил, что программа зависает, когда я нажимаю на нее, как в самой командной строке. Таким образом, я собираюсь предположить, что это не проблема с моим кодом, а то, как он взаимодействует с выделением текста. (Правка 2a: выбор должен делать это facepalm ) Еще раз спасибо за помощь.

Для дальнейшего использования, куда мне обратиться, чтобы узнать о более сложной отладке? Я использовал контрольные точки и смотрю выражения, но в школе они преподают только сам язык. Нужно ли изучать сборку x86?

Ответы [ 4 ]

3 голосов
/ 04 ноября 2011

Visual Studio включает обнаружение утечки памяти в отладочной версии библиотек C.См. эту страницу в MSDN для получения информации.

Но вы, похоже, не уверены, что сбой произошел из-за утечки памяти.Фактически, утечки памяти, как правило, не вызывают сбои (если только сбой не происходит, потому что в системе полностью не хватает памяти).У вас вполне могут быть утечки, но они могут быть не связаны с аварией.

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

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

1 голос
/ 04 ноября 2011

Возможно, Gdb и Valgrind были портированы на Windows?

И если ваше приложение не относится к windows или использует библиотеки (например, Qt), которые были перенесены как в Windows, так и в Linux, вы можете подуматьотладка в Linux.

1 голос
/ 04 ноября 2011

OllyDbg нет в вашем списке и отлично подходит

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

1 голос
/ 04 ноября 2011

Я использую визуальный детектор утечки. Он обнаруживает утечки памяти и дает вам стек вызовов для них. Он работает с visual studio и довольно надежен. Вы можете взять его отсюда - http://vld.codeplex.com/
Я не знаю, если это именно то, что вы ищете, но это полезно.

...