! htrace не показывает стека вызовов - PullRequest
0 голосов
/ 17 мая 2011

Когда я использую ! Htrace -diff в WinDbg для отладки утечки дескриптора, я получаю множество дескрипторов (возможно, утечек), которые не показывают стека вызовов:

В чем может быть причина этого, и какие варианты у меня есть для дальнейшей отладки?

Handle = 0x000273e4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273e0 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273dc - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273d8 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273d4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273d0 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273cc - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273c8 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273c4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273c0 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273bc - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273b8 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273b4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273b0 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273ac - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273a8 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------
Handle = 0x000273a4 - OPEN
Thread ID = 0x00001190, Process ID = 0x0000114c

--------------------------------------

Обновление : похоже, что утечка ручки зависит от графических драйверов или графических карт. Она начинает течь, когда я использую любую форму WPF, она течет только в некоторых системах Windows XP с определенными графическими картами / драйверами.

1 Ответ

1 голос
/ 22 октября 2011

Вызовы выполняются в режиме ядра подпрограммой ZwOpenProcess (http://msdn.microsoft.com/en-us/library/windows/hardware/ff567022(v=vs.85).aspx) и не сопровождаются вызовом ZwClose. Затем происходит утечка дескриптора. Вы не видите стеки вызовов, потому что они доступны только тогда, когда вызовы выполняются из пользовательского режима (OpenProcess / CloseHandle).

На XP SP3 найти виновника сложно. Решением было бы использовать встроенную в ОС функциональность «Отслеживание ссылок на объекты», но этот путь вымощен проблемами (см. http://www.osronline.com/showthread.cfm?link=198302 для дальнейших ссылок). Поскольку вы обнаружили, что эта проблема возникает только при наличии определенной видеокарты, вы можете попробовать связаться с поставщиком или проверить наличие более новой версии драйвера.

...