troushoo

スポンサーサイト

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

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

[Psscor2/Psscor4]!PrintDateTime

Psscor2/Psscor4で使用できるコマンド!PrintDateTimeついて説明します。
!PrintDateTimeを利用すると、System.DataTime・System.TimeSpanの値を簡単に調査できるようになります。

今回使用するアプリ
ReadLine()にどれくらい時間をかけたかを表示する単純なアプリです。

namespace PrintDateTime
{
    class Program
    {
        static System.DateTime before;
        static System.DateTime after;
        static System.TimeSpan span;
 
        static void MeasureTime()
        {
            before = System.DateTime.Now;
            System.Console.ReadLine();
            after = System.DateTime.Now;
            span = after - before;
        }
 
        static void Main(string[] args)
        {
            MeasureTime();
            Console.WriteLine("before: " + before);
            Console.WriteLine("after:" + after);
            Console.WriteLine("TimeSpan: " + span);
        }
    }
}

!PrintDateTimeの実行例
MeasureTime()の終了後に、!PrintDateTimeを実行します。
!PrintDateTimeは引数にSystem.DateTimeかSystem.SpanDateのオブジェクトのアドレスを受け取り、結果をわかりやすく表示します。
(詳細なログは後述します。ここでは結果だけを表示します。)

0:000> !PrintDateTime 027409c4  #before
a624b475
As a TimeSpan: 11409737.01:31:06.4164469
As a DateTime: 02/05/2012 22:43:00
0:000> !PrintDateTime 027409d4  #after
a81af6cf
As a TimeSpan: 11409737.01:31:09.7080527
As a DateTime: 02/05/2012 22:43:04
0:000> !PrintDateTime 027409e4  #span
01f6425a
As a TimeSpan: 000.00:00:03.2916058
As a DateTime: 22923/1875/41788 60119:1757:46168
(!PrintDateTimeの出力にはTimeSpanとDateTimeが両方表示されます。なぜなら、両方とも内部的にはSystem.DateTimeとして保存されているからです。)

もちろんプログラムの出力と一致します。

補足
・!DumpObjだけではSystem.dateTime、System.TimeSpanの調査は難しいことがわかります。
0:000> !DumpObj 027409d4 #after
Name: System.DateTime
MethodTable: 5d3081d0
EEClass: 5d0e0574
Size: 16(0x10) bytes
GC Generation: 0
(C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
5d309474  40000f4        4        System.UInt64  1 instance 9858012822697080527 dateData
5d332d0c  40000f0       30       System.Int32[]  0   shared   static DaysToMonth365
    >> Domain:Value  00512c00:02740bb8 <<
5d332d0c  40000f1       34       System.Int32[]  0   shared   static DaysToMonth366
    >> Domain:Value  00512c00:02740bf8 <<
5d3081d0  40000f2       28      System.DateTime  1   shared   static MinValue
    >> Domain:Value  00512c00:02740b98 <<
5d3081d0  40000f3       2c      System.DateTime  1   shared   static MaxValue
    >> Domain:Value  00512c00:02740ba8 <<
0:000> !DumpObj 027409e4 #span
Name: System.TimeSpan
MethodTable: 5d308134
EEClass: 5d0e04fc
Size: 16(0x10) bytes
GC Generation: 0
(C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
5d3323fc  400053d        4         System.Int64  1 instance 32916058 _ticks
5d308134  400053a      128      System.TimeSpan  1   shared   static Zero
    >> Domain:Value  00512c00:NotInit  <<
5d308134  400053b      12c      System.TimeSpan  1   shared   static MaxValue
    >> Domain:Value  00512c00:NotInit  <<
5d308134  400053c      130      System.TimeSpan  1   shared   static MinValue
    >> Domain:Value  00512c00:NotInit  <<
・今回のデバッグログとコメントです。
CommandLine: "C:\Users\seven\Documents\Visual Studio 2010\Projects\PrintDateTime\PrintDateTime\bin\Debug\PrintDateTime.exe"
Symbol search path is: srv*
Executable search path is:
(2a4.dc8): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=cedb0000 edx=0015dd48 esi=fffffffe edi=00000000
eip=76fc0fab esp=0029f770 ebp=0029f79c iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!LdrpDoDebuggerBreak+0x2c:
76fc0fab cc              int     3
0:000> sxe ld:mscorjit.dll #!bpmdを使用するための準備
0:000> .symfix C:\dbg(x86)\sym
0:000> g
ModLoad: 60630000 6068b000   C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=7efdd000 edi=0029e62c
eip=76f3fc42 esp=0029e500 ebp=0029e554 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!NtMapViewOfSection+0x12:
76f3fc42 83c404          add     esp,4
0:000> .load C:\dbg(x86)\Psscor2\psscor2.dll
0:000> !bpmd PrintDateTime.exe PrintDateTime.Program.MeasureTime
Found 1 methods...
MethodDesc = 001933d4
Adding pending breakpoints...
0:000> g
(2a4.dc8): CLR notification exception - code e0444143 (first chance)
JITTED PrintDateTime!PrintDateTime.Program.MeasureTime()
Setting breakpoint: bp 00370198 [PrintDateTime.Program.MeasureTime()]
Breakpoint 0 hit
eax=001933d4 ebx=0029f0bc ecx=027409b4 edx=00000003 esi=005485d0 edi=00000000
eip=00370198 esp=0029f058 ebp=0029f090 iopl=0         nv up ei pl nz ac po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000212
00370198 55              push    ebp
0:000> gu #MeasureTime()を抜けるまで実行
eax=01f6425a ebx=0029f0bc ecx=a624b475 edx=00000000 esi=005485d0 edi=00000000
eip=00370090 esp=0029f05c ebp=0029f090 iopl=0         nv up ei ng nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000282
00370090 90              nop
0:000> !DumpHeap -type System.DateTime # System.DateTimeはヒープ上に4つ
Loading the heap objects into our cache.
Address       MT     Size
027409c4 5d3081d0       16    0 System.DateTime
027409d4 5d3081d0       16    0 System.DateTime
02740b98 5d3081d0       16    0 System.DateTime
02740ba8 5d3081d0       16    0 System.DateTime
0:000> !PrintDateTime 027409c4 #before
a624b475
As a TimeSpan: 11409737.01:31:06.4164469
As a DateTime: 02/05/2012 22:43:00
0:000> !PrintDateTime 027409d4 #after
a81af6cf
As a TimeSpan: 11409737.01:31:09.7080527
As a DateTime: 02/05/2012 22:43:04
0:000> !PrintDateTime 02740b98
00000000
0           
0:000> !PrintDateTime 02740ba8
f4373fff
As a TimeSpan: 3652058.23:59:59.9999999
As a DateTime: 12/31/9999 23:59:59
0:000> !DumpHeap -type System.TimeSpan
Loading the heap objects into our cache.
Address       MT     Size
027409e4 5d308134       16    0 System.TimeSpan
0:000> !PrintDateTime 027409e4
01f6425a
As a TimeSpan: 000.00:00:03.2916058
As a DateTime: 22923/1875/41788 60119:1757:46168


  1. 2012/02/08(水) 15:06:40|
  2. SOS・Psscor2/Psscor4
  3. | トラックバック:0
  4. | コメント:0
<<JustDecompileで.NETアプリのデコンパイル | ホーム | [sos]!bpmd:ブレークポイント設定>>

コメント

コメントの投稿


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

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/32-d69d2a2a
この記事にトラックバックする(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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。