潜在的なGDIハンドルリークをデバッグしています。 @Alois Krausのおかげで、ハンドルカウントを実行するWinDbg scriptがあります。GDIハンドル分析のためにWOW64ダンプが必要ですか?
私のデバッグセッションでは、especially for .NETから、通常32ビットプロセスの32ビットダンプと64ビットプロセスの64ビットダンプがあることがわかりました。
私が受け取った2つのクラッシュダンプでは、スクリプトは機能しません。それに深く見て、私はGdiSharedHandleTableはそれらのダンプでnull
であることが判明:今
0:000> dt ntdll!_PEB GdiSharedHandleTable @$peb
+0x094 GdiSharedHandleTable : (null)
、his websiteに、アロイスは
重要に言及している:あなたはあなたが必要とする64ビットOS上で実行している場合32ビットアプリケーションをデバッグしても64ビットWindbgをアタッチすることができます!
残念ながら、32ビットクラッシュダンプで64ビットWinDbgを使用することは役に立ちません。結果は変わりません。
が今ここに理論です:32ビットプロセスで
- いくつかのDLLは、64ビットのDLLです(Windowsの内部5を参照して、第3章、 "システムの仕組み、" 211ページ)
ntdll
は1です- GDIオブジェクトはユーザーオブジェクト(カーネルオブジェクトではありません)ですが、OSによってペイントされなければなりません。従って、これは私がそれを
を動作させるためにWOW64のクラッシュダンプを持っている必要があることを意味しますWOW64層
への答えとして掲載? Win 7 x64では、calcは64ビットです。あなたのデバッグセッションでは、 'dd @@ C++(@ $ Peb-> GdiSharedHandleTable)'は '00000000 00000000'を返すので、それはnullであり、スクリプトは動作しません。ただし、スクリプトを実行すると正しい結果が返されます。これは私にとっては矛盾しているようです。 –
申し訳ありません私はdd poi()が2回目に見えるのは分かりません。appがsystembpにあるときに2回目、appがwinmainに初めて1回目のテーブルがヌルで2回目のテーブルが有効なメモリを指しているとき – blabb
申し訳ありません失敗。 –