Есть ли хорошая замена Valgrind для Windows?

210

Я изучал Valgrind, чтобы улучшить мое кодирование/отладку C, когда я обнаружил, что это только для Linux - у меня нет никакой другой необходимости или интереса к перемещению моей ОС в Linux, поэтому мне было интересно, есть ли такая же хорошая программа для Windows.

  • 0
    Какие виды отладки вы хотите сделать? Valgrind - довольно богатый набор инструментов, и ответы ниже указывают во всех направлениях. С упором на утечку памяти / отладку выделения.
  • 1
    Может быть, вы можете проверить код на виртуальной машине Linux внутри вашей Windows, именно тогда, когда вам нужно это проверить. Вы можете поделиться папкой разработки между виртуальной и не виртуальной машиной. если код достаточно переносим.
Теги:
valgrind
debugging
memory-leaks

38 ответов

30
Лучший ответ

Еще несколько хороших коммерческих инструментов:

  • 1
    Очистить: почтенный, но все же полезный, как показывает, сколько изменений корпоративной собственности он пережил!
  • 0
    Вроде дорого, хотя ...
Показать ещё 1 комментарий
112

Как отметил jakobengblom2, у valgrind есть костюм инструментов. В зависимости от того, о котором вы говорите, есть разные элементы счетчика окон. Здесь я остановлюсь только на OSS или бесплатных инструментах.

1. MemCheck:

р. Память. Это относительно новый инструмент, очень хорошо работает в Windows 7. Моя любимая особенность заключается в том, что он группирует в отчет те же уровни распределения утечек.

http://code.google.com/p/drmemory/

Я также использовал UMDH (http://support.microsoft.com/kb/268343) и нашел его тихо полезным и простым в настройке. Он работает от Win2000 до Win7.

AppVerifier должен иметь swissknife для разработчиков собственных драйверов Windows, его "память" проверяет аналогичную работу http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

2. Callgrind:

Мой любимый issleepy (http://www.codersnotes.com/sleepy) Это крошечный, но очень полезный и простой в использовании.

Если вам нужно больше возможностей, AMD CodeAnalyst Performance Analyzer свободен: 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. Массив:

Аналогичные (не совсем точное соответствие) бесплатные инструменты для окон:

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, но единственный бесплатный инструмент для окон, который я могу найти, который немного близок, - это "блокировка" checker в AppVerifier: http://msdn.microsoft.com/en-us/library/dd371695%28v=vs.85%29.aspx

  • 2
    LeakDiag, Deleaker, UMDH, App Verifier, DebugDiag ...
  • 1
    deleaker - лучший из этих утилит ...
Показать ещё 1 комментарий
30

Почему бы не использовать Valgrind + Wine для отладки вашего приложения Windows? Видеть http://wiki.winehq.org/Wine_and_Valgrind

(Chromium использует это, чтобы проверить версию Windows на наличие ошибок памяти, см. build.chromium.org и посмотрите на экспериментальные или водопады памяти и найдите вино.)

Там также д-р Память, см. dynamorio.org/drmemory.html

  • 3
    Потому что тогда вы не будете отлаживать приложение Windows - вы будете отлаживать приложение Linux.
  • 33
    Не нужно перекомпилировать в Wine. Просто перенесите свои .exe и .pdb в коробку Linux. И вы не будете отлаживать приложение Linux; вы отлаживаете свое точное приложение для Windows.
Показать ещё 2 комментария
15

Для Visual С++ попробуйте визуальный детектор утечек. Когда я использовал его, он обнаружил утечку памяти из вызова new и вернул фактическую строку в исходный код утечки. Последнюю версию можно найти на http://vld.codeplex.com/.

  • 0
    У меня тоже хорошо работает
  • 0
    Это не похоже на работу для меня. Я даже пытался создать простой проект, который ничего не делал, кроме как выделить немного памяти и не освободить ее. VLD не обнаружил это. : - |
Показать ещё 1 комментарий
14

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

прочитайте это article для более подробной информации

  • Очистить
  • Bounds Checker
  • Coverity (в основном это анализатор кода, но он будет улавливать утечку памяти в статическом режиме)
  • Световой код
  • пооддержки
  • ccmalloc
  • NJAMD
  • YAMD
  • Valgrind
  • mpatrol
  • Застраховать ++
  • 1
    добавить Deleaker ....
14

Среда разработки для Windows, которую вы используете, может содержать свои собственные инструменты. Visual Studio, например, позволяет обнаруживать и изолировать утечки памяти в ваших программах

  • 6
    Это очень мало практического использования. Он будет записывать имя файла / номер белья для оскорбительных выделений, но он будет информативным, только если вы вызовете malloc напрямую. При использовании new / delete, он бесполезно определит new.h как «оскорбительный» код.
  • 3
    Это работает правильно для меня, указывая правильную линию, даже новые / удалить используются.
Показать ещё 4 комментария
13

Попробуйте DUMA

12

Существует часть инструментов отладки Windows для Windows. Он бесплатный и в основном является специализированным распределителем памяти/деаллокатором.

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

  • 0
    Pageheap / gflags помогли мне разобраться в некоторых неприятных проблемах с кучей коррупции.
  • 0
    Я нашел gflags + gdb (от mingw) полезным в диагностике.
8

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

6

Я любил "Валидатор памяти" от компании под названием "Проверка программного обеспечения".

6

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

  • 0
    Дорогой да. Он окупился за один уик-энд, просто с помощью профиля.
5

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

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

4

См. ссылку " Source Test Tools" на странице ресурсов программного обеспечения QA Testing and Test Tool для списка похожих инструментов.

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

3

Попробуйте продукт Intel Inspector XE, который поможет вам выявить проблемы с памятью и потоками: http://software.intel.com/en-us/articles/intel-inspector-xe/

3

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

3

LeakDiag, UMDH, Verifier приложения, DebugDiag - все это полезные инструменты для повышения надежности кода и поиска утечек памяти.

3

Есть ли Jochen Kalmbach Detect Detector?

PS: URL-адрес последней версии похоронен где-то в потоке комментариев к статье.

3

Как насчет Purify?

  • 0
    Не совсем бесплатно ... но я думаю, вы могли бы найти тестовую лицензию для тестирования.
  • 0
    У них нет бесплатной пробной версии
Показать ещё 1 комментарий
2

Сегодня я нашел этот проект SF:

http://sourceforge.net/p/valgrind4win/wiki/Home/

Они переносят valgrind в Windows. Вероятно, через несколько лет у нас будет надежный valgrind на окнах.

2

Мы просто завершаем инструмент проверки безопасности памяти для Windows, который обрабатывает GCC и Micrsoft Visual C (а не С++ еще), и смотрят для бета-тестеров.

EDIT 12 июня 2011 года: не Beta больше, теперь производство для GCC и Microsoft Visual Studio C.

2

Если вы не боитесь mingw, вот некоторые ссылки (некоторые могут работать с MSVC)... http://betterlogic.com/roger/?p=1140

2

Еще один инструмент памяти для вашего списка: Валидатор памяти.

Не бесплатно, но не так дорого, как Purify или Boundschecker.

2

Лучший инструмент, который я когда-либо использовал, - DevPartner BoundsChecker - он не бесплатный, но у него есть период оценки.

2

Более или менее все Profiler включают проверку утечек памяти и отображение стека при распределении памяти.

Я могу порекомендовать Intels Parallel Inspector. Прост в использовании и не требует перекомпиляции. Пробная версия работает в течение 30 дней.

GlowCode и AtromatedQA также включают такие возможности. Все они предлагают бесплатные испытания.

Compuware DevPartner (aka BoundsChecker) в Contrast требует замедленного "инструментария", и приложение также работает медленнее при проверке ошибок. И BoundsChecker не может работать с 64-битными evsrions вообще. Мы отказались от этого инструмента.

  • 2
    Я определенно рекомендую свечение код. Я использовал его в прошлом, чтобы найти утечку памяти в DLL, вызываемой моим приложением.
  • 0
    Были жалобы на серьезные замедления при использовании DevPartner на моем последнем рабочем месте. Они делают все, чтобы не использовать его из-за того, насколько медленным оно будет.
2

Если вы работаете с Borland/CodeGear/Embarcadero С++ Builder, вы можете использовать CodeGuard.

2

Возможно, CodeSnitch будет чем-то, за чем вы после? http://www.entrek.com/codesnitch.html

1

Clang поддерживает плагин Address Sanitizer (опция -faddress-sanitizer), который может в значительной степени обнаруживать большинство ошибок, которые может найти Valgrind (хотя и не поддерживает обнаружение неинициализированных считываний памяти и утечек памяти). См. эту страницу для сравнения с Valgrind и другими аналогичными инструментами. В настоящее время находится официальный порт Windows, см. Порт ASAN AS.

Я попытался создать его сам в Windows пару месяцев назад и сдался, посмотрю мой родственный question. Вещи, возможно, изменились к лучшему сейчас, если вы хотите дать ему еще один шаг.

1

Вы можете взглянуть на статью "Дизайн и реализация игровой памяти в игре" в книге "Game Programming Gems 8".

В нем показано, как реализовать низкоуровневый полуинтрузивный профайлер памяти в реальном времени, исходный код, представленный на компакт-диске.

Изображение 4807

1

Бесплатный инструмент DebugDiag поможет найти память и обработать утечки.

Вам не нужно указывать свою программу для работы DebugDiag.

http://www.microsoft.com/downloads/details.aspx?FamilyID=28BD5941-C458-46F1-B24D-F60151D875A3&displaylang=en

Хотя это не самая простая или самая интуитивная программа! Удостоверьтесь, что вы Google для учебных пособий и инструкций о том, как их использовать.

1

Утилита кучи дампа пользовательского режима (UMDH) работает с операционной системой для анализа распределений кучи Windows для определенного процесса. Это неплохой инструмент бесплатно от Microsoft. Здесь - это мини-учебник "Как использовать Umdh.exe для поиска утечек памяти".

1

Вы можете попробовать RuntimeChecker trial to IBM Purify.

Свободным решением было бы использовать следующий код в Visual Studio:

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

Просто напишите это в верхней части всех файлов cpp. Это приведет к обнаружению утечек памяти вашего приложения, когда прекратит выполнение отладки и перечислит их в окне вывода. Двойной щелчок по линии утечки памяти приведет к тому, что вы выделите выделенную строку и никогда не выпускаете ее. Это может помочь вам: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml

1

Возможно, вы захотите прочитать, что делает Mozilla в отношении утечек памяти. Одним из инструментов на панели инструментов является сборщик мусора Hans Boehm, который используется как детектор утечки памяти.

1

Я использовал Insure ++, который отлично справляется с поиском утечек/повреждений памяти С++ и многих других ошибок, таких как неинициализированные переменные, ошибки указателя, строки и т.д. Он также визуально отображает "покрытие кода" и время использования памяти и т.д., которые дают более уверенно в вашем коде.. Вы можете попробовать его для версии трейла..

1

Проверьте этот вопрос: Есть ли хорошая замена Valgrind для Windows?. Хотя предлагается общая замена valgrind, в основном она обсуждает обнаружение утечек памяти, а не обнаружения условий гонки.

1

Определенно очистите! Я использовал это для анализа массивных базовых кодов ( > 3000 kSLOC) и нашел отличным.

Вам может понравиться этот список в Википедии.

Кстати, я нашел memwatch, чтобы быть полезным. Спасибо Йохану!

0
0

Parasoft Insure ++ всегда был надежным:

http://www.parasoft.com/jsp/products/insure.jsp?itemId=63

0

Просто идея, вы также можете реализовать распределитель памяти и отслеживать все вызовы в malloc и бесплатно. Однако это может быть слишком много для некоторых проектов.

  • 0
    Вот как это делают большинство игр. Но это огромное начинание и много инструментов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню