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

210

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

селезень
источник
Какие виды отладки вы хотите сделать? Valgrind - довольно богатый набор инструментов, и ответы ниже указывают во всех направлениях. С упором на утечку памяти / отладку выделения.
jakobengblom2
1
Может быть, вы можете проверить код на виртуальной машине Linux внутри вашей Windows, именно тогда, когда вам нужно это проверить. Вы можете поделиться папкой разработки между виртуальной и не виртуальной машиной. если код достаточно переносим.
Лиран Ореви

Ответы:

29

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

orip
источник
1
Очистить: почтенный, но все же полезный, как показывает, сколько изменений корпоративной собственности он пережил!
Норман Рэмси
2
Insure ++ всегда требует инструментирования вашего кода и навсегда выполняет ваш код во время выполнения.
C Джонсон
117

Как указал 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 обладают определенным уровнем профилирования пропущенного кэша второго уровня, но не так хороши и просты в использовании, как Cachegrind.

5. DRD:

Пока еще не нашел ничего бесплатного и мощного в Windows. Единственный бесплатный инструмент для Windows, который я могу найти немного ближе, - это средство проверки «блокировки» в AppVerifier: http://msdn.microsoft.com/en-us/library /dd371695%28v=vs.85%29.aspx

Лэйлин Чен
источник
2
Также есть gperftools (ранее Google PerfTools) . Это не замена valgrind (что на самом деле), но у него есть новый malloc, cpu profiler, heap profiler и checker. Стоит посмотреть, как это поддерживается в Linux и Windows (в том числе Mingw) и других приложениях.
Александр
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
Точно, лучше использовать настоящую вещь, чем хромого клона: D Люблю Вальгринда.
альтернатива
11
Ницца! Из windows вы можете запустить виртуальную машину под управлением Linux, запустив ваше программное обеспечение в почти vm wine, в valgrind vm. Бонусные баллы, если Windows запускается с
виртуальной машины под
15

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

tgs_stdio
источник
Кажется, это не работает для меня. Я даже пытался создать простой проект, который ничего не делал, кроме как выделить немного памяти и не освободить ее. VLD не обнаружил это. : - |
Synetech
@Synetech inc. У меня была такая же проблема в VS2010 ... Использование новейшей версии VLD решило мою проблему
relaxxx
14

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

dmityugov
источник
6
Это очень мало практического использования. Он будет регистрировать имя файла / номер белья для оскорбительных выделений, но он будет информативным, только если вы вызовете malloc напрямую. При использовании new / delete, он бесполезно определит new.h как «оскорбительный» код.
user9665
3
Это работает правильно для меня, указывая правильную линию, даже новые / удалить используются.
Родриго,
Но сработает ли это, если библиотечная функция выделяет? Например, стандартный.
Алекс Будовски
1
Valdrind делает гораздо больше, чем обнаруживает утечки памяти, я в основном использую его для поиска освобожденного и неинициализированного стека и кучи памяти, которую в противном случае может быть невероятно сложно отладить.
ideasman42
1
@ user9665 Visual Leak Detector ( vld.codeplex.com ) обеспечивает полный стек вызовов для каждой утечки памяти с минимальными изменениями исходного кода. Проверьте пример на сайте
KindDragon
14

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

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

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

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

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


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

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

Джаспер Беккерс
источник
6

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

Manuel
источник
Дорогой да. Он окупился за один уик-энд, просто с помощью профиля.
EvilTeach
4

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

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

Патрик Кафф
источник
3

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

Алекс Будовски
источник
3

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

зр.
источник
3

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

grigy
источник
Не совсем бесплатно ... но я думаю, вы могли бы найти тестовую лицензию для тестирования.
Дэвид Родригес - dribeas
Мертвая ссылка на 2011-02-04 для BoundsChecker.
dwj
2

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

Винс
источник
2

Более или менее все профилировщики включают проверку на утечки памяти и показывают вам стек, когда память была выделена.

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

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

Compuware DevPartner (также известный как BoundsChecker) в Contrast нуждается в замедленной перекомпиляции «инструментария», и приложение также работает медленнее при проверке на наличие ошибок. А BoundsChecker вообще не может работать с 64-битными евсрионами. Мы отказались от этого инструмента.

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

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

Dror Helper
источник
2

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

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

Стивен Келлетт
источник
2

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

РЕДАКТИРОВАТЬ 12 июня 2011 года: больше не бета, теперь производство для GCC и Microsoft Visual Studio C.

Ира Бакстер
источник
1

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

красный
источник
1

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

Кристиан Адам
источник
1

Вы можете попробовать пробную версию RuntimeChecker в IBM Purify. .

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

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

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

Патрис Бернассола
источник