3

私は SOS コマンドとその出力を処理していますが、現在使用されているすべてのタイプを実際に取得する方法がないように思われることに気付きました。これまでのところ最善の方法は ですが!dumpheap -stat、インスタンスがあるタイプのみをリストしています。ただし、ValueType がボックス化されていない場合、その型は に表示されません!dumpheap -stat。(ヒープに割り当てられていないため、これは驚くべきことではありません。)

私の質問は次のとおりです。現在存在する追加の ValueTypes を把握する効率的な方法はありますか? !dumpvc <mt> <address>つまり、個々のヒープ オブジェクト (出力に基づくものなど) を検査するときにオンデマンドで読み込むことができます!do <address>が、表示される統計については、(インスタンス/クラス定義) すべてを見るよりも簡単な方法でタイプを見つけるとよいでしょう。既知のクラスを調べて、追加の ValueTypes を使用しているかどうかを確認します。

4

1 に答える 1

0

これを行うための効率的な方法はないようです。つまり、返された各型!DumpHeap -statについて、それが構造体配列であるか、構造体フィールドが含まれているかを確認することになりました。どちらの場合も、新しく見つかった構造体タイプに構造体フィールドも含まれているかどうかを再帰的に確認する必要があります。その場合、構造体型をすでに見たことがない限り、再帰が必要です。

!DumpModule -mtところで、オプションではありません。たとえば、は表示されますSystem.Collections.Generic.List`1が、Listクラスなどを表すものは何もありません。

于 2012-06-22T05:23:18.947 に答える