Есть ли хорошая замена Valgrind для Windows?
Я искал Valgrind, чтобы помочь улучшить кодирование / отладку C, когда обнаружил, что это только для Linux - у меня больше нет необходимости или интереса в переносе моей ОС на Linux, поэтому мне было интересно, есть ли такая же хорошая программа для Windows.
38 ответов
Еще несколько хороших коммерческих инструментов:
Как указал jakobengblom2, у valgrind есть набор инструментов. В зависимости от того, о чем вы говорите, существуют разные части счетчика окон. Я упомяну только OSS или бесплатные инструменты здесь.
1. MemCheck:
Доктор Память. Это относительно новый инструмент, очень хорошо работающий в Windows 7. Моя любимая особенность заключается в том, что он группирует в отчете одинаковые стеки распределения утечек.
http://code.google.com/p/drmemory/
Я также использовал UMDH ( http://support.microsoft.com/kb/268343) и нашел его очень полезным и простым в настройке. Работает с Win2000 до Win7.
AppVerifier должен иметь швейцарский нож для разработчиков собственного кода Windows, его средство проверки памяти выполняет аналогичную работу http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
2. Callgrind:
Мой любимый - verysleepy ( http://www.codersnotes.com/sleepy). Он крошечный, но очень полезный и простой в использовании.
Если вам нужны дополнительные функции, анализатор производительности AMD CodeAnalyst™ предоставляется бесплатно: http://developer.amd.com/documentation/videos/pages/introductiontoamdcodeanalystperformanceanalyzer.aspx
Инструменты анализа производительности Windows бесплатны от Microsoft, не очень просты в использовании, но могут выполнить работу, если вы готовы тратить время. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/03/15/xperf-windows-performance-toolkit.aspx Загрузить: http://msdn.microsoft.com/en-us/performance/cc752957
3. Массив:
Аналогичные (не совсем точные) бесплатные инструменты для Windows:
VMMap от sysinternals: http://technet.microsoft.com/en-us/sysinternals/dd535533
! команда heap в windbg: http://hacksoflife.blogspot.com/2009/06/heap-debugging-memoryresource-leak-with.html
4. Cachegrind:
Вышеупомянутые средства повышения производительности Windows обладают определенным уровнем профилирования пропусков кэша L2, но не так хороши и просты в использовании, как Cachegrind.
5. DRD:
Пока еще не нашел ничего бесплатного и мощного в Windows. Единственный бесплатный инструмент для Windows, который можно найти немного ближе, - это средство проверки "блокировки" в AppVerifier: http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx
Почему бы не использовать Valgrind + Wine для отладки вашего приложения Windows? Смотрите http://wiki.winehq.org/Wine_and_Valgrind
(Chromium использует это, чтобы проверить версию Windows на наличие ошибок памяти; см. Build.chromium.org и посмотрите на экспериментальные водопады или водопады памяти и найдите вино.)
Там также доктор памяти, см. Dynamorio.org/drmemory.html
Для Visual C++ попробуйте Visual Leak Detector. Когда я использовал его, он обнаружил утечку памяти из new
позвонить и вернуть фактическую строку в исходном коде утечки. Последнюю версию можно найти по адресу http://vld.codeplex.com/.
Среда разработки для Windows, которую вы используете, может содержать собственные инструменты. Visual Studio, например, позволяет обнаруживать и изолировать утечки памяти в ваших программах
Я хотел бы перечислить некоторые инструменты, надеюсь, будет полезно
прочитайте эту статью для более подробной информации
- очищаться
- Проверка границ
- Coverity (в основном это анализатор кода, но он уловит утечку памяти в статическом режиме)
- Glow Code
- пооддержки
- ccmalloc
- NJAMD
- YAMD
- Valgrind
- mpatrol
- Застраховать ++
Pageheap.exe является частью средств отладки для Windows. Это бесплатно и в основном пользовательский распределитель / освобождение памяти.
В сочетании с Visual Studio я обычно использую Visual Leak Detector или просто _CrtDumpMemoryLeaks(), который является вызовом API Win32. Оба ничего особенного, но они сделали свою работу.
В прошлом у меня была возможность использовать Compuware DevPartner Studio, и это было действительно хорошо, но это довольно дорого. Более дешевым решением может быть GlowCode, я просто работал с версией 5.x и, несмотря на некоторые проблемы с подключением к процессу, который мне нужен для отладки, он работал довольно хорошо.
Viusual Studio может помочь в обнаружении утечек памяти. См. Раздел Советы и рекомендации по Microsoft Visual C++ -> "Утечки памяти". Смотрите также этот пост в SO
Хотя настоящая трассировка возможна только в Team Edtion Visual Studio.
См. Ссылку " Исходные инструменты тестирования" на странице "Ресурсы для тестирования и тестирования инструментов программного обеспечения" для получения списка аналогичных инструментов.
В прошлом я использовал BoundsChecker,DevPartner Studio и Intel V-Tune для профилирования. Мне больше всего понравился V-Tune; Вы можете эмулировать различные наборы микросхем Intel, и это даст вам советы о том, как оптимизировать работу под эту платформу.
Подходит ли детектор утечки памяти Йохена Кальмбаха?
PS: URL-адрес последней версии находится где-то в ветке комментариев к статье.
LeakDiag, UMDH, App Verifier, DebugDiag - все это полезные инструменты для повышения надежности кода и обнаружения утечек памяти.
Попробуйте продукт Intel Inspector XE, который поможет вам обнаружить проблемы с памятью и многопоточностью: http://software.intel.com/en-us/articles/intel-inspector-xe/
Лучший инструмент, который я когда-либо использовал, это DevPartner BoundsChecker - он не бесплатный, но у него есть период оценки.
Другой инструмент памяти для вашего списка: Memory Validator.
Не бесплатно, но далеко не так дорого, как Purify или Boundschecker.
Мы только что завершили инструмент проверки безопасности памяти для Windows, который обрабатывает GCC и Micrsoft Visual C (пока не C++), и ищем бета-тестеров.
РЕДАКТИРОВАТЬ 12 июня 2011 года: больше не бета, теперь производство для GCC и Microsoft Visual Studio C.
Если вы разрабатываете с Borland/CodeGear/Embarcadero C++ Builder, вы можете использовать CodeGuard.
Если вы не боитесь mingw, вот несколько ссылок (некоторые могут работать с MSVC)... http://betterlogic.com/roger/?p=1140
Возможно CodeSnitch будет то, что вы ищете? http://www.entrek.com/codesnitch.html
Более или менее все профилировщики включают проверку на утечки памяти и показывают вам стек, когда память была выделена.
Я могу рекомендовать Intel Parallel Inspector. Прост в использовании и не требует перекомпиляции. Пробная версия работает в течение 30 дней.
GlowCode и AtromatedQA также включают такие возможности. Все они предлагают бесплатные пробные версии.
Compuware DevPartner (также известный как BoundsChecker) в Contrast нуждается в замедленной перекомпиляции "инструментария", и приложение также работает медленнее при проверке на наличие ошибок. А BoundsChecker вообще не может работать с 64-битными евсрионами. Мы отказались от этого инструмента.
Я нашел этот проект SF сегодня:
http://sourceforge.net/p/valgrind4win/wiki/Home/
Они портируют valgrind на Windows. Возможно, через несколько лет у нас будет надежный валгринд на окнах.
Определенно очисти! Я использовал это, чтобы проанализировать некоторые массивные базы кода (>3000 kSLOC) и нашел, что это превосходно.
Вы можете посмотреть этот список в Википедии.
Кстати, я нашел memwatch, чтобы быть полезным. Спасибо, Йохан!
Я использовал Insure ++, который отлично справляется с поиском утечек / повреждений памяти в C++ и многих других ошибок, таких как неинициализированные переменные, ошибки указателей, строки и т. Д. Он также визуально отображает "покрытие кода" и использование памяти во время выполнения и т. Д., Которые дают больше уверенности в Ваш код.. Вы можете попробовать это для версии следа..
Вы можете взглянуть на статью " Проектирование и реализация профилировщика игровой памяти" в книге "Gems 8 для программирования игр".
Он показывает, как реализовать полуинтрузивный профилировщик памяти в реальном времени с низким объемом служебной информации, исходный код которого находится на компакт-диске.
Вы можете попробовать пробную версию RuntimeChecker или пробную версию IBM Purify.
Бесплатным решением было бы использовать следующий код в Visual Studio:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
Просто напишите это в верхней части всех ваших файлов cpp. Это обнаружит утечки памяти вашего приложения при остановке отладочного прогона и отобразит их в окне вывода. Двойной щелчок по линии утечки памяти выделит вам строку, где память выделена и никогда не освобождается. Это может вам помочь: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml