0

WinDbgで!htrace -diffを使用してハンドルリークをデバッグすると、コールスタックを表示しない多くのハンドル(おそらくリークしているハンドル)が表示されます。

これの理由は何であり、これをさらにデバッグするためにどのようなオプションが必要ですか?

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を使用すると、リークが発生し始めます。これは、特定のグラフィックカード/ドライバーを搭載した一部のWindowsXPシステムでのみリークします。

4

1 に答える 1

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を参照してください)。この問題は特定のビデオカードが存在する場合にのみ発生することがわかったため、ベンダーに連絡するか、新しいバージョンのドライバを確認することができます。

于 2011-10-21T21:26:15.237 に答える