Есть ли хорошая замена Valgrind для Windows?
-
03-07-2019 - |
Вопрос
Я изучал Valgrind, чтобы помочь улучшить мое кодирование / отладку на C, когда обнаружил, что он предназначен только для Linux - у меня нет другой потребности или интереса в переносе моей ОС на Linux, поэтому мне было интересно, есть ли столь же хорошая программа для Windows.
Решение
Еще несколько хороших коммерческих инструментов:
Другие советы
Как отметил jakobengblom2, у valgrind есть набор инструментов.В зависимости от того, о какой из них вы говорите, существуют разные части счетчика Windows.Здесь я упомяну только операционные системы или бесплатные инструменты.
1.Проверка памяти:
ДокторПамять.Это относительно новый инструмент, который очень хорошо работает в 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.Вызов Grind:
Мое любимое - очень сонное ( 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.Кэшегринд:
Вышеупомянутые средства повышения производительности 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, например, позволяет обнаруживать и изолировать память утечки в ваших программах
Я хотел бы перечислить какой-нибудь инструмент, надеюсь, он будет полезен
прочтите эту статью для получения более подробной информации
<Ол>Попробуйте DUMA
В состав средств отладки для Windows входит Pageheap.exe. Это бесплатно и в основном пользовательский распределитель / освобождение памяти. Р>
В сочетании с Visual Studio я обычно использую Visual Leak Detector или просто _CrtDumpMemoryLeaks (), который является API-интерфейсом win32. вызов. Оба ничего особенного, но они сделали свою работу.
У меня была возможность использовать Compuware DevPartner Studio , и это было действительно хорошо, но это довольно дорого. Более дешевое решение может быть GlowCode , я просто работал с версией 5.x и, несмотря на некоторые проблемы при присоединении к процессу, который мне нужен для отладки, он работал довольно хорошо.
Мне очень нравится Memory Validator , от компании под названием Software Проверка.
Viusual Studio может помочь в обнаружении утечек памяти. См. Советы и рекомендации по Microsoft Visual C ++ - > «Утечки памяти» раздел. См. Также эту запись в SO
Хотя настоящая трассировка возможна только в Team Edtion Visual Studio.
См. Инструменты тестирования исходного кода " ссылка на страницу ресурсов для тестирования и тестирования инструментов Software QA для получения списка похожих инструментов.
В прошлом я использовал BoundsChecker, DevPartner Studio и Intel V-Tune для профилирования. Мне больше всего понравился V-Tune; Вы можете эмулировать различные наборы микросхем Intel, и это даст вам советы о том, как оптимизировать работу под эту платформу.
Подходит ли детектор утечки памяти Йохена Кальмбаха ?
PS: URL-адрес последней версии находится где-то в ветке комментариев к статье.
LeakDiag, UMDH, App Verifier, DebugDiag - все это полезные инструменты для повышения надежности кода и обнаружения утечек памяти.
Библиотека Boost Test может обнаруживать утечки памяти.
Как насчет Purify ?
Попробуйте продукт Intel Inspector XE, который поможет вам обнаружить проблемы с памятью и многопоточностью: http://software.intel.com/en-us/articles/intel-inspector-xe/
Возможно, CodeSnitch станет тем, что вам нужно? http://www.entrek.com/codesnitch.html
Если вы разрабатываете с Borland / CodeGear / Embarcadero C ++ Builder, вы можете использовать CodeGuard.
Более или менее все профилировщики включают проверку на утечки памяти и показывают стек при выделении памяти.
Я могу порекомендовать Intel Parallel Inspector . Прост в использовании и не требует перекомпиляции. Пробная версия работает в течение 30 дней.
GlowCode и AtromatedQA также включает такие возможности. Все они предлагают бесплатные пробные версии.
Compuware DevPartner (он же BoundsChecker) в Contrast нуждается в замедленном " инструментарии " перекомпилировать и приложение также работает медленнее при проверке на наличие ошибок. А BoundsChecker вообще не может работать с 64-битными евсрионами. Мы отказались от этого инструмента. Р>
Лучший инструмент, который я когда-либо использовал, - это DevPartner BoundsChecker - это не бесплатно, но оно имеет период оценки.
Еще один инструмент памяти для вашего списка: Проверка памяти .
Не бесплатно, но далеко не так дорого, как Purify или Boundschecker.
Если вы не боитесь mingw, вот несколько ссылок (некоторые могут работать с MSVC) ... http://betterlogic.com/roger/?p=1140
Мы только что завершили инструмент проверки безопасности памяти для Windows, который обрабатывает GCC и Micrsoft Visual C (пока не C ++), и ищем бета-тестеров.
РЕДАКТИРОВАТЬ 12 июня 2011 года: больше не бета-версия, теперь работа для GCC и Microsoft Visual Studio C.
Сегодня я нашел этот SF проект:
http://sourceforge.net/p/valgrind4win/wiki/Home/ р>
Они переносят valgrind в Windows. Вероятно, через несколько лет у нас будет надежный valgrind на окнах.
Проверьте этот вопрос: Есть ли хорошая замена Valgrind для Windows? ? Хотя и предлагается общий заменитель valgrind, он в основном рассматривает детекторы утечки памяти, а не определения условий гонки.
Я использовал Insure ++, который отлично справляется с поиском утечек / повреждений памяти в c ++ и многих других ошибок, таких как неинициализированные переменные, ошибки указателей, строки и т. д. Он также визуально отображает «покрытие кода»; использование памяти во время выполнения и т. д., что придаст уверенности вашему коду. Вы можете попробовать его для новой версии.
Возможно, вы захотите прочитать, что Mozilla делает в отношении утечек памяти. Одним из инструментов в их наборе инструментов является сборщик мусора Hans Boehm, используемый как детектор утечки памяти . р>
Вы можете попробовать RuntimeChecker пробную версию до Пробная версия IBM Purify .
Бесплатным решением будет использование следующего кода в Visual Studio:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
Просто напишите это в верхней части всех ваших файлов cpp. Это обнаружит утечки памяти вашего приложения при остановке отладочного прогона и отобразит их в окне вывода. Двойной щелчок по линии утечки памяти выделит вам строку, где память выделена и никогда не освобождается. Это может помочь вам: http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtmlа> р>