Можно ли обнаружить утечки GDI из отладчика Visual Studio?

Утечки объектов GDI можно увидеть в диспетчере задач или в Process Explorer. (Ну, вы не видите утечек, но вы можете видеть, постоянно ли увеличивается количество использований объектов.)

Существуют также инструменты, позволяющие просматривать объекты GDI по типу, такие как GDIView[a] , ДеЛикер, DPUS или GDIDebug (исходный код).

[a] Обратите внимание, что я считаю GDIView отличным инструментом для определения и подтверждая наличие утечек GDI, но на самом деле это не поможет вам найти утечку кода в больших приложениях. (Я также отмечу здесь, что инструмент работает очень хорошо и выглядит хорошо, хотя его домашняя страница немного странная (-:)

Существует также подключаемый модуль WinDBG под названием leaktrap, который использует MS Библиотека обходов.

Я также знаю (и использовал) профилировщик ресурсов AQTime, который позволяет обнаруживать GDI (и другое) утечки ресурсов в приложении, включая трассировки стека для утечек вызовов.

Теперь, однако, мой фактический вопрос: Можно ли обнаружить утечку объектов GDI из отладчика VC++? Чтобы не требовался отдельный инструмент, а утечки GDI можно было обнаружить во время обычной отладки, а не надо проверять отдельно.


person Martin Ba    schedule 01.12.2010    source источник
comment
если бы я мог +2 этот вопрос, я бы. Помимо того, что это хороший вопрос, вы на самом деле предоставляете массу полезной информации.   -  person tenfour    schedule 01.12.2010


Ответы (3)


Объекты GDI не обязательно проверять по отдельности (не особо), ими можно управлять с помощью Deleaker — и вы поймете, где утечка. Внимательно прочитайте инструкции и просмотрите демонстрационное видео: http://deleaker.com/

person MastAvalons    schedule 15.11.2011
comment
Почему вы сказали, что их не нужно проверять по отдельности? Если приложение не освобождает объекты GDI должным образом, конечно, я хотел бы выяснить, какой код утекает... ?!! - person Martin Ba; 16.11.2011
comment
Лично не пробовал, но все равно отмечу как ответ. - person Martin Ba; 14.05.2013
comment
Что за чушь! После его установки отдельное приложение сразу вылетает, а плагин VS показывает пустое окно! У меня такое впечатление, что это подделка. И они хотят 3999 долларов за лицензию на сайт! Смешной! В вашем приложении произошло необработанное исключение. Метод «get_CanEnableIme» для типа «DeleakerLibrary.ObjectsControl» из сборки «DeleakerLibrary, версия = 3.0.92.0, культура = нейтральная, PublicKeyToken = cd8e4da67e0a5d66» переопределяет метод, который не виден из этой сборки. - person Elmue; 09.02.2016
comment
@Elmue, если бы вы погуглили метод get_CanEnableIme, вы бы увидели, что это довольно типичная проблема. Чтобы решить эту проблему, просто установите SP1 для среды выполнения .Net, и она будет работать. - person Artem Razin; 12.01.2017
comment
Программное обеспечение по такой высокой цене должно иметь возможность проверять среду, в которой оно работает, и выдавать пользователю интеллектуальное сообщение об ошибке. Более интеллектуальное программное обеспечение даже обнаружит эту проблему непосредственно в установщике и сообщит пользователю, что он должен установить SP1. Но выбрасывание этого исключения - действительно ПЛОХОЕ программирование. - person Elmue; 17.01.2017

Intel Parallel Inspector — это средство проверки утечек памяти, интегрирован в Visual Studio и может обнаруживать утечки GDI.

person ronag    schedule 01.12.2010
comment
Хммм... расширяет ли это существующий отладчик Visual Studio или это отдельный инструмент, который просто интегрируется с Visual Studio? (как это делает AQTime) - person Martin Ba; 01.12.2010
comment
Средство проверки утечки памяти и отладчик — это две разные вещи... и да, они просто интегрируются с Visual Studio. - person ronag; 01.12.2010

Visual Studio не имеет встроенного профилировщика памяти для неуправляемых приложений.

Это подтверждено.

person Madhur Ahuja    schedule 01.12.2010
comment
Вопрос о ресурсах GDI, а не о памяти. (И в VC++ есть встроенные инструменты для отслеживания утечек памяти в собственном коде.) - person Adrian McCarthy; 15.11.2011