どの基準に従って出力数を制限しますか? -l オプションは、行番号に従って出力を制限するだけです。これは役に立ちません: 最初の 10 個のオブジェクトしか表示されていないとしましょう。探しているオブジェクトがリストにない可能性もあります。
WinDbgs 出力ウィンドウに対して出力が長すぎる場合は、.logopen を使用してオブジェクトをファイルにダンプし、テキスト エディターでファイルを確認します。
オブジェクトがどのように見えるか他のアイデアがある場合は、すべてのオブジェクトに対してループを実行できます
.foreach ( obj { !dumpheap -short -type MyType} )
次に.if
、オブジェクトがこの基準に一致するかどうかを判断します。
例として、干し草の山から針を探していました。ヒープに 3000 を超える Hashtable があるプログラムで特定の Hashtable を検索していました。私が使用しようとしたコマンドは
.foreach ( obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
1C
ハッシュテーブルのカウント メンバーのオフセットです。
100
Hashtable が少なくとも持つと予想されるアイテムの数です。
!dumpheap -type
残念ながら、デバッガーを何らかの形でクラッシュさせた HashtableEnumerators もリストされていたため、Hashtables ではすぐには機能しませんでした。
ハッシュテーブルのみをダンプするに!dumpheap -stat
は、ハッシュテーブルのメソッドテーブルを実行して把握し、-mt <methodtable>
代わりに を使用してコマンドを実行し-type <classname>
ます。
.foreach ( obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }