troushoo

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

[sos]!DumpHeap:マネージヒープの情報表示

WinDbg等で使用できる.NET用のデバッガエクステンションsosでマネージヒープの情報を表示する!DumpHeapについて説明します。

今回使用するアプリ
以下のサンプルアプリを起動し、Console.ReadLine()でWinDbgをアタッチし、!DumpHeapを利用してその時のobj.iが本当に1234であるかを調べてみます。

namespace DumpHeap
{
    class MyObj
    {
        public int i;
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            MyObj obj = new MyObj();
            obj.i = 1234;
            Console.ReadLine();
            Console.WriteLine(obj.i);
        }
    }
}

[!DumpHeap]
!DumpHeapの出力結果は2つに分かれております。
前半は、マネージドヒープにあるすべてのオブジェクトのアドレス、メソッドテーブル、サイズを表示します。
後半は、Statisticsから始まる行で、クラス名でグルーピングされた情報を表示します。メソッドテーブル、インスタンスの数、サイズ、クラスの名前を表示します。

0:004> !DumpHeap
Address       MT     Size
02661000 004d0d58       12 Free
~略~
0266ba84 001c3880       12    
~略~
03663240 004d0d58       16 Free
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
71a56524        1           12 System.Nullable`1[[System.Boolean, mscorlib]]
~略~
001c3880        1           12 DumpHeap.MyObj
~略~
71a06ba8       68        19220 System.Object[]
Total 857 objects

後半の出力を見るとDumpHeap.MyObjeのMT(メソッドテーブル)のアドレスが001c3880であることがわかります。前半を見るとMTが001c3880であるオブジェクトのアドレスは0266ba84 であるので、それを!DumpObjを使用してみてみます。

0:004> !DumpObj 0266ba84
Name:        DumpHeap.MyObj
MethodTable: 001c3880
EEClass:     001c1480
Size:        12(0xc) bytes
File:        C:\Users\seven\Documents\Visual Studio 2010\Projects\DumpHeap\DumpHeap\bin\Debug\DumpHeap.exe
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
71a528f8  4000001        4         System.Int32  1 instance     1234 i

iの値が1234であることがわかります。

[!dumpheapのその他の引数]
・!DumHeap -type <タイプ名>
特定のタイプのみの!DumpHeapを表示します。

0:004> !DumpHeap -type DumpHeap.MyObj
Address       MT     Size
0266ba84 001c3880       12    
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
001c3880        1           12 DumpHeap.MyObj
Total 1 objects

・!DumpHeap -mt <メソッドテーブルのアドレス>
外套のメソッドテーブルのみ表示します。

0:004> !DumpHeap -mt 001c3880      
Address       MT     Size
0266ba84 001c3880       12    
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
001c3880        1           12 DumpHeap.MyObj
Total 1 objects

・!DumpHeap –stat
!DumpHeapの出力の後半部分のみを表示します。

0:004> !DumpHeap -stat
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
71a56524        1           12 System.Nullable`1[[System.Boolean, mscorlib]]
~略~
001c3880        1           12 DumpHeap.MyObj
~略~
71a06ba8       68        19220 System.Object[]
Total 857 objects

・!dumpheap -min <数字>
<数字>バイトより大きいサイズのオブジェクトを表示します。

0:004> !DumpHeap -min 4905
Address       MT     Size
02667290 71a06ba8     8208    
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
71a06ba8        1         8208 System.Object[]
Total 1 objects

・!DumpHeap -max <数字>
<数字>バイトより小さいサイズのオブジェクトを表示します。

0:004> !DumpHeap -max 13
Address       MT     Size
02661000 004d0d58       12 Free
~略~
0266c3c8 71a528f8       12    
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
71a56524        1           12 System.Nullable`1[[System.Boolean, mscorlib]]
~略~
71a4f568        6           72 System.Object
Total 33 objects

・!DumpHeap -StartAtLowerBound <アドレス>
アドレスが<アドレス>以上のオブジェクトを表示します。

0:004> !DumpHeap -StartAtLowerBound 0266c774
Address       MT     Size
0266c774 71a4f92c       24    
0266c78c 71a4f92c       28    
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
71a4f92c        2           52 System.String
Total 2 objects

リンク
・MSDNによる!dumpheap含むsos.dllの説明
http://msdn.microsoft.com/en-us/library/bb190764.aspx


  1. 2012/01/23(月) 15:17:48|
  2. SOS・Psscor2/Psscor4
  3. | トラックバック:0
  4. | コメント:0
<<Visual Studioでストレステスト(Rig) | ホーム | ネットワークトラブルシューティングに役に立つサイト集>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/28-f4fb769b
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (92)
ネットワーク (76)
Visual Studio (56)
SOS・Psscor2/Psscor4 (25)
WinDbg (25)
Linux (24)
Azure (17)
Tips (20)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。