Обнаружение профилировщика/утечки VS2010

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

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

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

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

10
задан Edward Strange 15 April 2010 в 18:53
поделиться

5 ответов

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

1
ответ дан 4 December 2019 в 02:49
поделиться

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

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

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

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

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

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

3
ответ дан 4 December 2019 в 02:49
поделиться

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

0
ответ дан 4 December 2019 в 02:49
поделиться

Не знаю, как связать с этим ссылку, которую я ранее отправлял в ответ на аналогичный вопрос:

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

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

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

0
ответ дан 4 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: