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