Как отследить утечку объекта Windows USER? - PullRequest
4 голосов
/ 18 марта 2011

У меня есть программа, которая пропускает объекты USER, которые можно увидеть в диспетчере задач. Есть ли способ определить, какой тип ресурса просочился? Я использовал такие программы, как GDI View для утечек GDI, которые разбивают его по типам объектов. Есть ли что-нибудь подобное для объектов USER?

Ответы [ 2 ]

2 голосов
/ 31 января 2016

Вы можете отследить утечки дескриптора окна, перехватив Create / DestroyWindow, а затем отследить переданный дескриптор. Таким образом, вы можете легко с помощью ETW отследить график в WPA, где лишние дескрипторы, которые еще не удалены, остаются вне.

См. http://geekswithblogs.net/akraus1/archive/2016/01/30/172079.aspx

С моим форком EasyHook он работает также для x64 на Win 8 и более поздних версиях. Ниже приведено изображение, которое было создано с помощью ETWStackwalk.exe, который является частью моей вилки EasyHook. В WPA вы видите все открытые и закрытые окна, а также то, какие окна все еще открыты, проверив в столбце AllocSize значения> 0. Затем отфильтруйте события, у которых по-прежнему открыт дескриптор, и вы получите стеки вызовов там, где они были распределены, но до сих пор не освобождены.

enter image description here

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

0 голосов
/ 18 марта 2011

Есть отладчик с именем windbg . Он может делать такие вещи, но кривая обучения ошеломляет.

...