2011-05-17 77 views
0

當我使用!htrace -diff在WinDbg中調試句柄泄漏,我得到了很多的句柄(可能有泄漏的那些)沒有顯示調用堆棧的:HTRACE沒有顯示出調用堆棧

可能是什麼原因爲此,我還有哪些選項需要進一步調試?

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系統上泄漏。

+0

您正在運行的操作系統是什麼? 這是轉儲還是現場調試? 您之前是否打過'!htrace -enable'? – 2011-10-10 19:54:23

+0

Windows XP,是的,我確實調用了'!htrace -enable'還有另外一個線索:句柄泄漏似乎取決於圖形驅動程序或圖形卡。當我使用任何形式的WPF時它開始泄漏,它只在某些帶有某些圖形卡/驅動程序的Windows XP系統上泄漏。 – bitbonk 2011-10-11 05:25:02

+0

您可以使用'!handle 0x000273c4 0xf'來查看有關特定0x000273c4句柄的更多信息。然後,您會知道句柄的類型是您正在尋找的類型。如果泄漏與GDI有關,則它們由另一個句柄池處理,而不在列表中,您可以使用!句柄進行處理。 GDI泄漏是痛苦的,我不知道任何記錄的方式來跟蹤他們。您可以從NirSoft試用此工具(http://www.nirsoft.net/utils/gdi_handles.html),看看您是否能夠縮小問題範圍。 – 2011-10-11 07:12:15

回答

1

通過ZwOpenProcess例程(http://msdn.microsoft.com/en-us/library/windows/hardware/ff567022(v=vs.85).aspx)在內核模式下執行調用,並且不會跟隨ZwClose電話。然後手柄泄漏。您看不到這些調用堆棧,因爲它們僅在從用戶模式(OpenProcess/CloseHandle)執行調用時纔可用。

在XP SP3上,似乎很難找到罪魁禍首。解決方法是使用OS中構建的「對象引用跟蹤」功能,但是此路徑存在問題(有關更多參考,請參見http://www.osronline.com/showthread.cfm?link=198302)。既然您發現只有當某個特定的視頻卡出現時纔會出現此問題,您可以嘗試聯繫供應商或檢查驅動程序的更新版本。

+0

ZWopenProcess/ZWClose +1 – bitbonk 2011-10-24 06:02:32

相關問題