タスクマネージャーで表示できるUSERオブジェクトをリークしているプログラムがあります。どのタイプのリソースがリークされているかを判断する方法はありますか?オブジェクトタイプごとに分類するGDIリーク用のGDIビューなどのプログラムを使用しました。USERオブジェクトにこれに似たものはありますか?
2 に答える
Create/DestroyWindow をフックしてウィンドウ ハンドル リークを追跡し、渡されたハンドルを追跡できます。そうすれば、まだ削除されていない余分なハンドルが残っている WPA のグラフを ETW トレースで簡単に生成できます。
http://geekswithblogs.net/akraus1/archive/2016/01/30/172079.aspxを参照してください。
私の EasyHook のフォークでは、Win 8 以降の x64 でも動作します。以下は、私の EasyHook フォークの一部である ETWStackwalk.exe で作成されたイメージです。WPA を使用すると、AllocSize 列の値 > 0 をチェックすることで、すべての開いたウィンドウと閉じたウィンドウ、およびまだ開いているウィンドウを確認できます。次に、ハンドルがまだ開いているイベントをフィルター処理し、割り当てられたが解放されなかったコール スタックを直接取得します。遠い。
ブラシまたはフォントを使用している場合は、リークの原因と思われるメソッドのツールを拡張する必要があります。提示されたアプローチは、どのメソッドがリークを作成する疑いがあるかを知っていて、リソース割り当てをフックして呼び出しを解放できる限り、リソース リークを解決することができます。
windbgというデバッガーがあります。このようなことはできますが、学習曲線は驚異的です。