troushoo

[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
https://troushoo.blog.fc2.com/tb.php/28-f4fb769b
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (114)
ネットワーク (54)
Wireshark (48)
AD (36)
Linux (45)
WinDbg (46)
SOS・Psscor2/Psscor4 (25)
Visual Studio (56)
Tips (32)
コンテナ (4)
Azure (17)
.NET (24)
Python (9)
Java (5)
SQL (6)
事例 (1)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

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