Профилировщик VS2010 / обнаружение утечек - PullRequest
10 голосов
/ 15 апреля 2010

Кто-нибудь знает профилировщик и детектор утечки, которые будут работать с кодом VS2010? Желательно тот, который работает на Win7.

Я искал здесь и в Google. Я нашел один детектор утечки, который работает (Memory Validator), но я не слишком впечатлен. Во-первых, он показывает кучу утечек в меню и вещи, которые, я уверен, не являются реальными. Я также попробовал GlowCode, но он ПРОСТО профилировщик и отказывается устанавливать на win7.

Я использовал AQtime. В нем было все, что мне было нужно, обнаружение утечек памяти / ресурсов, профилирование различных вещей, статический анализ и т. Д. К сожалению, сейчас это дает ложные результаты.

Моя основная проблема заключается в том, что VS2010 говорит, что в программе есть утечки, которых не было в VS2005. Я почти уверен, что это ложные срабатывания, но я не могу найти хороший инструмент для проверки этого. Memory Validator не показывает те же, и сообщение об утечках из VS не кажется рациональным.

Ответы [ 6 ]

3 голосов
/ 31 января 2011

Нет, как упоминал Ори, DevPartner Studio от Micro Focus имеет функции обнаружения утечек и другие функции профилирования во время выполнения. В отличие от высоких цен, которые DPS имел под Compuware, теперь вы можете лицензировать только профилировщики времени выполнения, а не весь пакет, если вам это нужно. Бесстыдная вилка: я работаю в команде DevPartner. Наша поддержка 64-битных приложений будет выпущена в версии 10.5 4 февраля 2011 года. Ищите новости о выпуске и загрузки по электронной почте на http://www.DevPartner.com.

3 голосов
/ 22 июня 2010

Для обнаружения утечек памяти вы можете попробовать Visual Leak Detection .

1 голос
/ 04 мая 2010

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

0 голосов
/ 25 августа 2010

Не уверен, как ссылку на это, которое я ранее выложил в ответ на похожий вопрос:

Вы можете использовать umdh.exe для захвата и сравнения снимков процесса до и после утечки. Это лучше всего работает с отладочными двоичными файлами, но является жизнеспособным с выпуском при условии, что пути к символам установлены правильно - это даст вам стеки памяти, выделенные между 1-м и 2-м снимками.

http://support.microsoft.com/kb/268343

Преимущество этого подхода в том, что он бесплатный.

0 голосов
/ 28 июня 2010

Здесь действительно очень просто и легко использовать код обнаружения утечки: http://www.codeproject.com/kb/cpp/MemLeakDetect.aspx

0 голосов
/ 20 мая 2010

Я использовал несколько коммерческих альтернатив, и хотя они могут дать фантастические результаты, они также часто просто не работают по неизвестным причинам:

  • Rational Количество: фантастический продукт для профилирования производительности, но они не выпускали новые версии в течение нескольких лет, и часто (в моем случае) программное обеспечение часто отказывалось работать
  • AQTime: также очень хорошо (меньше, чем Rational Quantity), но иногда отказывается работать по неизвестным причинам.
  • Валидатор производительности: тот же

В последние годы я вернулся к довольно грубому способу отбора заявок. Это не так идеально, как использование инструментария, но гораздо быстрее, может работать в любом приложении и всегда работает. Мой любимый "Very Sleepy" (http://www.codersnotes.com/sleepy), но также и Luke StackWalker (http://lukestackwalker.sourceforge.net/) вполне хорош. Поскольку приложения могут запускаться сразу и без заметного замедления, цикл "изменить приложение, профиль" очень короткий и эффективный.

Для поиска утечек памяти в Windows есть несколько инструментов, которые вы можете использовать. Опять же, они далеки от совершенства и часто могут исследовать только запущенные приложения извне, а не просто сообщать об утечках в конце приложения. Найдите «Инструменты отладки Microsoft» (UMDH, LeakDiag, gflags). Лично мне гораздо проще написать свой собственный менеджер памяти и позволить ему сообщать об утечках в конце приложения. Это не так сложно писать. Что вам нужно сделать, это:

  • Реализуйте правильные операторы new и delete (я думаю, вы должны реализовать 4 новых и 4 оператора удаления)
  • В реализации new получите стек вызовов (ищите StackWalk) и сохраните его с выделенной памятью.
  • Создайте класс, который запускает ваш менеджер памяти в конструкторе, и сообщите все утечки (включая стек вызовов) в деструкторе.
  • Создайте глобальную переменную этого типа класса. Возможно, потребуется сделать его специальной глобальной переменной, используя #pragma (init_seg).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...