Есть ли хорошая замена 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, например, позволяет обнаруживать и изолировать утечки памяти в ваших программах

Я хотел бы перечислить некоторые инструменты, надеюсь, будет полезно

прочитайте эту статью для более подробной информации

  1. очищаться
  2. Проверка границ
  3. Coverity (в основном это анализатор кода, но он уловит утечку памяти в статическом режиме)
  4. Glow Code
  5. пооддержки
  6. ccmalloc
  7. NJAMD
  8. YAMD
  9. Valgrind
  10. mpatrol
  11. Застраховать ++

Попробуй ДУМУ

Pageheap.exe является частью средств отладки для Windows. Это бесплатно и в основном пользовательский распределитель / освобождение памяти.

См. http://support.microsoft.com/kb/286470

В сочетании с Visual Studio я обычно использую Visual Leak Detector или просто _CrtDumpMemoryLeaks(), который является вызовом API Win32. Оба ничего особенного, но они сделали свою работу.

В прошлом у меня была возможность использовать Compuware DevPartner Studio, и это было действительно хорошо, но это довольно дорого. Более дешевым решением может быть GlowCode, я просто работал с версией 5.x и, несмотря на некоторые проблемы с подключением к процессу, который мне нужен для отладки, он работал довольно хорошо.

Я любил Memory Validator от компании Software Verification.

Viusual Studio может помочь в обнаружении утечек памяти. См. Раздел Советы и рекомендации по Microsoft Visual C++ -> "Утечки памяти". Смотрите также этот пост в SO

Хотя настоящая трассировка возможна только в Team Edtion Visual Studio.

См. Ссылку " Исходные инструменты тестирования" на странице "Ресурсы для тестирования и тестирования инструментов программного обеспечения" для получения списка аналогичных инструментов.

В прошлом я использовал BoundsChecker,DevPartner Studio и Intel V-Tune для профилирования. Мне больше всего понравился V-Tune; Вы можете эмулировать различные наборы микросхем Intel, и это даст вам советы о том, как оптимизировать работу под эту платформу.

Как насчет Очищения?

Библиотека Boost Test может обнаружить утечки памяти.

Подходит ли детектор утечки памяти Йохена Кальмбаха?

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

Другие вопросы по тегам