troushoo

スポンサーサイト

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

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

[SOS]!dumpobj:オブジェクトの詳細表示

WinDbg等で使用できる.NET用のデバッガエクステンションsosでオブジェクトの詳細を表示する!dumpobjについて説明します。

今回使用するアプリ
以下のアプリで例外発生時のダンプを調査します。

class Program
{
    class MyException : Exception
    {
        public MyException(string message) : base(message) { }
    }
 
    class MyClass
    {
        int a = 0x1;
        string str = "test";
    }
 
    static void Main(string[] args)
    {
        MyClass mc = new MyClass();
        throw new MyException("例外");
    }
}


[!dumpobj <オブジェクトのアドレス>]
オブジェクトの詳細を表示します。
以下では、ダンプ取得時の変数aとstrの値を表示します。
0:000> !dumpobj 0x022723d4
Name:        dumpobj.Program+MyClass
MethodTable: 004a373c
EEClass:     004a12e0
Size:        16(0x10) bytes
File:        c:\users\eight\documents\visual studio 2010\Projects\dumpobj\dumpobj\bin\Debug\dumpobj.exe
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
71b0a8fc  4000001        8         System.Int32  1 instance        1 a
71b08df8  4000002        4        System.String  0 instance 022723e4 str

上記より変数aの値が1であることがわかります。

strは参照型です。これはVTが0であることからもわかります。
(VTの列は、0が参照型1が値型であることを意味します。)
したがって、Valueに対して!dumpobjを実行すれば詳細が分かります。

0:000>  !dumpobj 02b323e4
Name: System.String
MethodTable: 71b08df8
EEClass: 71734228
Size: 22(0x16) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String: test
Fields:
MT Field Offset Type VT Attr Value Name
71b0a8fc 40000ab 4 System.Int32 1 instance 4 m_stringLength
71b09924 40000ac 8 System.Char 1 instance 74 m_firstChar
71b08df8 40000ad c System.String 0 shared static Empty



(補足)
・今回の!dumpobjの引数の値は!clrstack -lで取得可能です。
0:000> !clrstack –l
OS Thread Id: 0x760 (0)
Child SP       IP Call Site
00c3eec0 7704b554 [HelperMethodFrame: 00c3eec0]
00c3ef98 00f100c7 dumpobj.Program.Main(System.String[]) [c:\users\eight\documents\visual studio 2010\Projects\dumpobj\dumpobj\Program.cs @ 22]
    LOCALS:
        0x00c3efa4 = 0x02b323d4
・!dumpobjは!doと省略することもできます。

リンク
sos.dllのコマンド説明 [MSDN]
値型と参照型 [MSDN]


  1. 2011/10/16(日) 11:10:00|
  2. SOS・Psscor2/Psscor4
  3. | トラックバック:0
  4. | コメント:0
<<Visual StudioでWinDbg | ホーム | [SOS] !ClrStack:コールスタック表示>>

コメント

コメントの投稿


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

トラックバック

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

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

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

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

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

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