Я изучал Valgrind, чтобы улучшить мое кодирование/отладку C, когда я обнаружил, что это только для Linux - у меня нет никакой другой необходимости или интереса к перемещению моей ОС в Linux, поэтому мне было интересно, есть ли такая же хорошая программа для Windows.
Как отметил 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
Почему бы не использовать Valgrind + Wine для отладки вашего приложения Windows? Видеть http://wiki.winehq.org/Wine_and_Valgrind
(Chromium использует это, чтобы проверить версию Windows на наличие ошибок памяти, см. build.chromium.org и посмотрите на экспериментальные или водопады памяти и найдите вино.)
Там также д-р Память, см. dynamorio.org/drmemory.html
Для Visual С++ попробуйте визуальный детектор утечек. Когда я использовал его, он обнаружил утечку памяти из вызова new
и вернул фактическую строку в исходный код утечки. Последнюю версию можно найти на http://vld.codeplex.com/.
Я хотел бы перечислить некоторые инструменты, надеюсь, будет полезно
прочитайте это article для более подробной информации
Среда разработки для Windows, которую вы используете, может содержать свои собственные инструменты. Visual Studio, например, позволяет обнаруживать и изолировать утечки памяти в ваших программах
Попробуйте DUMA
Существует часть инструментов отладки Windows для Windows. Он бесплатный и в основном является специализированным распределителем памяти/деаллокатором.
gflags
+ gdb
(от mingw) полезным в диагностике.
В сочетании с Visual Studio я обычно использую Visual Leak Detector или просто _CrtDumpMemoryLeaks(), который является вызовом win32 api. Оба ничего не представляют собой, но они выполняют свою работу.
Я любил "Валидатор памяти" от компании под названием "Проверка программного обеспечения".
У меня была возможность использовать Compuware DevPartner Studio в прошлом, и это было действительно хорошо, но это довольно дорого. Более дешевое решение может быть GlowCode, я просто работал с версией 5.x и, несмотря на некоторые проблемы с присоединением к процессу, который мне нужен debug, он работал достаточно хорошо.
Viusual Studio может помочь обнаружить утечки памяти. См. Советы и подсказки Microsoft Visual С++ → "Утечки памяти". См. Также этот пост в SO
Хотя реальная трассировка возможна только с Team Edtion Visual Studio.
См. ссылку " Source Test Tools" на странице ресурсов программного обеспечения QA Testing and Test Tool для списка похожих инструментов.
Я использовал BoundsChecker, DevPartner Studio и Intel V-Tune в прошлом для профилирования. Мне понравилось V-Tune; вы можете эмулировать различные чипсеты Intel, и это даст вам подсказки о том, как оптимизировать для этой платформы.
Попробуйте продукт Intel Inspector XE, который поможет вам выявить проблемы с памятью и потоками: http://software.intel.com/en-us/articles/intel-inspector-xe/
Библиотека Boost Test может обнаруживать утечки памяти.
LeakDiag, UMDH, Verifier приложения, DebugDiag - все это полезные инструменты для повышения надежности кода и поиска утечек памяти.
Есть ли Jochen Kalmbach Detect Detector?
PS: URL-адрес последней версии похоронен где-то в потоке комментариев к статье.
Как насчет Purify?
Сегодня я нашел этот проект SF:
http://sourceforge.net/p/valgrind4win/wiki/Home/
Они переносят valgrind в Windows. Вероятно, через несколько лет у нас будет надежный valgrind на окнах.
Мы просто завершаем инструмент проверки безопасности памяти для Windows, который обрабатывает GCC и Micrsoft Visual C (а не С++ еще), и смотрят для бета-тестеров.
EDIT 12 июня 2011 года: не Beta больше, теперь производство для GCC и Microsoft Visual Studio C.
Если вы не боитесь mingw, вот некоторые ссылки (некоторые могут работать с MSVC)... http://betterlogic.com/roger/?p=1140
Еще один инструмент памяти для вашего списка: Валидатор памяти.
Не бесплатно, но не так дорого, как Purify или Boundschecker.
Лучший инструмент, который я когда-либо использовал, - DevPartner BoundsChecker - он не бесплатный, но у него есть период оценки.
Более или менее все Profiler включают проверку утечек памяти и отображение стека при распределении памяти.
Я могу порекомендовать Intels Parallel Inspector. Прост в использовании и не требует перекомпиляции. Пробная версия работает в течение 30 дней.
GlowCode и AtromatedQA также включают такие возможности. Все они предлагают бесплатные испытания.
Compuware DevPartner (aka BoundsChecker) в Contrast требует замедленного "инструментария", и приложение также работает медленнее при проверке ошибок. И BoundsChecker не может работать с 64-битными evsrions вообще. Мы отказались от этого инструмента.
Если вы работаете с Borland/CodeGear/Embarcadero С++ Builder, вы можете использовать CodeGuard.
Возможно, CodeSnitch будет чем-то, за чем вы после? http://www.entrek.com/codesnitch.html
Clang поддерживает плагин Address Sanitizer (опция -faddress-sanitizer), который может в значительной степени обнаруживать большинство ошибок, которые может найти Valgrind (хотя и не поддерживает обнаружение неинициализированных считываний памяти и утечек памяти). См. эту страницу для сравнения с Valgrind и другими аналогичными инструментами. В настоящее время находится официальный порт Windows, см. Порт ASAN AS.
Я попытался создать его сам в Windows пару месяцев назад и сдался, посмотрю мой родственный question. Вещи, возможно, изменились к лучшему сейчас, если вы хотите дать ему еще один шаг.
Вы можете взглянуть на статью "Дизайн и реализация игровой памяти в игре" в книге "Game Programming Gems 8".
В нем показано, как реализовать низкоуровневый полуинтрузивный профайлер памяти в реальном времени, исходный код, представленный на компакт-диске.
Бесплатный инструмент DebugDiag поможет найти память и обработать утечки.
Вам не нужно указывать свою программу для работы DebugDiag.
Хотя это не самая простая или самая интуитивная программа! Удостоверьтесь, что вы Google для учебных пособий и инструкций о том, как их использовать.
Утилита кучи дампа пользовательского режима (UMDH) работает с операционной системой для анализа распределений кучи Windows для определенного процесса. Это неплохой инструмент бесплатно от Microsoft. Здесь - это мини-учебник "Как использовать Umdh.exe для поиска утечек памяти".
Вы можете попробовать 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
Возможно, вы захотите прочитать, что делает Mozilla в отношении утечек памяти. Одним из инструментов на панели инструментов является сборщик мусора Hans Boehm, который используется как детектор утечки памяти.
Я использовал Insure ++, который отлично справляется с поиском утечек/повреждений памяти С++ и многих других ошибок, таких как неинициализированные переменные, ошибки указателя, строки и т.д. Он также визуально отображает "покрытие кода" и время использования памяти и т.д., которые дают более уверенно в вашем коде.. Вы можете попробовать его для версии трейла..
Проверьте этот вопрос: Есть ли хорошая замена Valgrind для Windows?. Хотя предлагается общая замена valgrind, в основном она обсуждает обнаружение утечек памяти, а не обнаружения условий гонки.
Определенно очистите! Я использовал это для анализа массивных базовых кодов ( > 3000 kSLOC) и нашел отличным.
Вам может понравиться этот список в Википедии.
Кстати, я нашел memwatch, чтобы быть полезным. Спасибо Йохану!
Parasoft Insure ++ всегда был надежным:
Просто идея, вы также можете реализовать распределитель памяти и отслеживать все вызовы в malloc и бесплатно. Однако это может быть слишком много для некоторых проектов.