dt (型の表示)

dt コマンドは、ローカル変数、グローバル変数、またはデータ型に関する情報を表示します。 これにより、単純なデータ型に関する情報と、構造体と共用体を表示できます。

User-Mode構文

dt [-DisplayOpts] [-SearchOpts] [module!]Name [[-SearchOpts] Field] [Address] [-l List] 
dt [-DisplayOpts] Address [-l List] 
dt -h 

Kernel-Mode構文

[Processor] dt [-DisplayOpts] [-SearchOpts] [module!]Name [[-SearchOpts] Field] [Address] [-l List] 
dt [-DisplayOpts] Address [-l List] 
dt -h 

パラメーター

プロセッサ
必要な情報を含むプロセスを実行しているプロセッサを指定します。 詳細については、「 マルチプロセッサ構文」を参照してください。 プロセッサはカーネル モードでのみ指定できます。

DisplayOpts
次の表に示す 1 つ以上のオプションを指定します。 これらのオプションの前にはハイフンが付きます。

オプション 説明

-a[quantity]

インデックスを使用して、新しい行に各配列要素を表示します。 数量要素の合計が表示されます。 a数量の間にスペースを入れてはいけません。 a の後に数字が続かない場合は、配列内のすべての項目が表示されます。 この方法で表示する各型名またはフィールド名の直前に -a[quantity] スイッチが表示されます。

-b

ブロックを再帰的に表示します。 表示される構造体にサブ構造体が含まれている場合、任意の深さに再帰的に展開され、完全に表示されます。 ポインターは、サブ構造ではなく、元の構造にある場合にのみ拡張されます。

-c

コンパクトな出力。 可能であれば、すべてのフィールドが 1 行に表示されます。 ( -a スイッチと共に使用すると、各配列要素は複数行ブロックとして書式設定されるのではなく、1 行を受け取ります)。

-d

アスタリスクで終わる 名前 と共に使用する場合は、Name で始まるすべての型の詳細な出力を表示 しますName がアスタリスクで終わらない場合は、詳細出力を表示します。

-e

dt を強制的に型を列挙します。 このオプションは、 dt が誤って Name 値を型としてではなくインスタンスとして解釈している場合にのみ必要です。

-i

サブタイプをインデントしないでください。

-o

構造体フィールドのオフセット値を省略します。

-p

アドレス は、仮想アドレスではなく物理アドレスです。

-r[depth]

サブタイプ フィールドを再帰的にダンプします。 深度が指定されている場合、この再帰は深度レベルの後に停止します。 深さは 1 ~ 9 の数字でなければならず、r深さの間にスペースを入れてはなりません。 r[depth] スイッチは、アドレスの直前に表示されます。

-ssize

サイズが size の値と等しい型のみをバイト単位で列挙 しますs オプションは、型が列挙されている場合にのみ役立ちます。 s を指定すると、-e も常に暗黙的に指定されます。

-t

型のみを列挙します。

-v

詳細出力。 これにより、構造体の合計サイズとその要素の数などの追加情報が提供されます。 これを -y 検索オプションと共に使用すると、関連する型情報を持たないシンボルであっても、すべてのシンボルが表示されます。

SearchOpts
次の表に示す 1 つ以上のオプションを指定します。 これらのオプションの前にはハイフンが付きます。

オプション 説明

-n

これは、次のパラメーターが名前であることを示します。 これは、次の項目が完全に 16 進文字で構成される場合に使用する必要があります。それ以外の場合はアドレスとして使用されるためです。

-y

これは、次のパラメーターが名前の先頭であることを示します。必ずしも名前全体ではありません。 y が含まれている場合、すべての一致が一覧表示され、その後に一覧の最初の一致に関する詳細情報が表示されます。 y が含まれていない場合は、完全一致のみが表示されます。

モジュール
この構造体を定義するモジュールを指定する省略可能なパラメーター。 グローバル変数またはグローバル型と同じ名前のローカル変数または型がある場合は、グローバル変数を意味することを指定する モジュール を含める必要があります。 それ以外の場合、ローカル変数が大文字と小文字を区別しない一致で、グローバル変数が大文字と小文字を区別する一致である場合でも、 dt コマンドはローカル変数を表示します。

名前
型またはグローバル変数の名前を指定します。 Name がアスタリスク (*) で終わる場合は、一致するすべてのリストが表示されます。 したがって、 dt A\* では、"A" で始まるすべてのデータ型、グローバル、および静的なデータ型が一覧表示されますが、これらの型の実際のインスタンスは表示されません。 ( -v 表示オプションを同時に使用すると、関連する型情報を持つシンボルだけでなく、すべてのシンボルが表示されます)。 Name をピリオド (.) に置き換えて、最後に使用した値の Name を繰り返す必要があることを示すこともできます。

Name にスペースが含まれている場合は、かっこで囲む必要があります。

フィールド
表示するフィールドを指定します。 フィールドを省略すると、すべてのフィールドが表示されます。 フィールドの後にピリオド (.) が続く場合は、このフィールドの第 1 レベルのサブフィールドも表示されます。 フィールドの後に一連のピリオドが続く場合、サブフィールドはピリオドの数と同じ深さに表示されます。 フィールド名の後にピリオドが続くと、 -y 検索オプションが使用された場合と同様に、プレフィックス一致として扱われます。 フィールドの後にアスタリスク (*)が続く場合は、フィールドの先頭としてのみ扱われ、必ずしもフィールド全体とは限らず、一致するすべてのフィールドが表示されます。

アドレス
表示する構造体のアドレスを指定します。 Name を省略した場合は、Address を含め、グローバル変数のアドレスを指定する必要があります。 に指定がない限り、アドレスは仮想アドレスと見なされます。 p オプションを使用して、物理アドレスを指定します。 "at" 記号 ( @ ) を使用してレジスタ ( @eax など) を指定します。

リスト
リンク リストをリンクするフィールド名を指定します。 Address パラメーターを含む必要があります。

環境

モード

ユーザー モード, カーネル モード

ターゲット

ライブ、クラッシュ ダンプ

プラットフォーム

all

追加情報

メモリ操作の概要と、その他のメモリ関連コマンドの説明については、「メモリの 読み取りと書き込み」を参照してください。

解説

dt コマンドの出力では、常に基になる 10 の符号付き数値と 16 進数の符号なし番号が表示されます。

シンボル値を許可する dt のすべてのパラメーターでは、文字列ワイルドカードも許可されます。 詳細については、「 文字列ワイルドカード構文 」を参照してください。

y オプションと -n オプションは、任意の名前またはフィールドの前に置くことができます。 y オプションを使用すると、型または構造体名の先頭を指定できます。 たとえば、dt -y ALLEN は ALLENTOWN 型に関するデータを表示します。 ただし、dt -y AALLENTOWN 型を表示できませんでした。代わりに、dt -ny A を使用する必要があります。A は有効な 16 進値であり、-n オプションを指定しないアドレスとして解釈されるためです。

Name が構造体を示す場合は、すべてのフィールド (dt myStruct など) が表示されます。 特定のフィールドが 1 つだけ必要な場合は、 dt myStruct myField を実行できます。 これにより、C が myStruct.myField を呼び出すメンバーが表示されます。 ただし、 コマンド dt myStruct myField1 myField2 には myStruct.myField1myStruct.myField2 が表示されることに注意してください。 myStruct.myField1.myField2 は表示されません。

構造体の名前またはフィールドの後に添字が続く場合は、配列の単一のインスタンスを指定します。 たとえば、 dt myStruct myFieldArray[3] は、対象の配列の 4 番目の要素を表示します。 ただし、型名の後に添字が続く場合は、配列全体を指定します。 たとえば、 dt CHAR[8] myPtr には 8 文字の文字列が表示されます。 下付き文字は、現在の基数に関係なく、常に 10 進数と見なされます。 プレフィックスが 0x の場合、エラーが発生します。

コマンドは .pdb ファイルでは、任意の CPU プラットフォームのデバッグに自由に使用できます。

dt によって使用される型情報には、すべての Windows 定義型を含め、typedef で作成されたすべての型名が含まれます。 たとえば、 符号なし longchar は有効な型名ではありませんが、 ULONGCHAR は有効です。 すべての Windows 型名の完全な一覧については、Microsoft Windows SDKを参照してください。

実際にプログラムで使用されている限り、独自のコード内で typedef によって作成されたすべての型が存在します。 ただし、ヘッダーで定義されているが実際には使用されない型は .pdb シンボル ファイルに格納されず、デバッガーからはアクセスできません。 このような型をデバッガーで使用できるようにするには、それを typedef ステートメントの入力として使用します。 たとえば、コードに次のように表示される場合、構造MY_DATAは .pdb シンボル ファイルに格納され、 dt コマンドで表示できます。

typedef struct _MY_DATA {
    . . .
    } MY_DATA;
typedef  MY_DATA *PMY_DATA; 

一方、MY_DATAとPMY_DATAの両方が最初の typedef によって定義されているため、次のコードでは十分ではありません。したがって、MY_DATA自体は typedef ステートメントの入力として使用されていません。

typedef struct _MY_DATA {
    . . .
    } MY_DATA, *PMY_DATA; 

いずれの場合も、型情報は完全なシンボル ファイルにのみ含まれます。すべてのプライベート シンボル情報が削除されたシンボル ファイルには含まれません。 詳細については、「 パブリック シンボルとプライベート シンボル」を参照してください。

Unicode 文字列を表示する場合は、最初に .enable_unicode (Unicode 表示を有効にする) コマンドを使用する 必要があります。 .enable_long_status (長整数表示を有効にする) コマンドを使用して、長整数の表示を制御できます。

次の例では、 dt はグローバル変数を表示します。

0:000> dt mt1 
   +0x000 a                : 10
   +0x004 b                : 98 'b'
   +0x006 c                : 0xdd
   +0x008 d                : 0xabcd
   +0x00c gn               : [6] 0x1
   +0x024 ex               : 0x0 

次の例では、 dt は配列フィールド gn を表示します。

0:000> dt mt1 -a gn 
   +0x00c gn : 
    [00] 0x1
    [01] 0x2
    [02] 0x3
    [03] 0x4
    [04] 0x5
    [05] 0x6 

次のコマンドは、変数のいくつかのサブフィールドを表示します。

0:000> dt mcl1 m_t1 dpo 
   +0x010 dpo  : DEEP_ONE
   +0x070 m_t1 : MYTYPE1 

次のコマンドは、フィールド m_t1のサブフィールドを表示します。 ピリオドによってプレフィックスの一致が自動的に発生するため、"m_t1" で始まるフィールドのサブフィールドも表示されます。

0:000> dt mcl1 m_t1. 
   +0x070 m_t1  : 
      +0x000 a     : 0
      +0x004 b     : 0 '
      +0x006 c     : 0x0
      +0x008 d     : 0x0
      +0x00c gn    : [6] 0x0
      +0x024 ex    : 0x0 

これを任意の深さに繰り返すことができます。 たとえば、コマンド dt mcl1 a..c. は、最初のフィールド名が a で始まり、3 番目のフィールド名が c で始まるすべてのフィールドを深度 4 に表示します。

サブフィールドの表示方法の詳細な例を次に示します。 最初に、 Ldr フィールドを表示します。

0:000> dt nt!_PEB Ldr 7ffdf000 
   +0x00c Ldr : 0x00191ea0 

次に、ポインター型フィールドを展開します。

0:000> dt nt!_PEB Ldr Ldr. 7ffdf000 
   +0x00c Ldr  : 0x00191ea0
      +0x000 Length : 0x28
      +0x004 Initialized : 0x1 '
      +0x008 SsHandle : (null)
      +0x00c InLoadOrderModuleList : _LIST_ENTRY [ 0x191ee0 - 0x192848 ]
      +0x014 InMemoryOrderModuleList : _LIST_ENTRY [ 0x191ee8 - 0x192850 ]
      +0x01c InInitializationOrderModuleList : _LIST_ENTRY [ 0x191f58 - 0x192858 ]
      +0x024 EntryInProgress : (null) 

次に、 CriticalSectionTimeout フィールドを 表示します。

0:000> dt nt!_PEB CriticalSectionTimeout 7ffdf000 
   +0x070 CriticalSectionTimeout : _LARGE_INTEGER 0xffffe86d`079b8000 

次に、 CriticalSectionTimeout 構造体サブフィールドを 1 レベル深く展開します。

0:000> dt nt!_PEB CriticalSectionTimeout. 7ffdf000 
   +0x070 CriticalSectionTimeout  :  0xffffe86d`079b8000
      +0x000 LowPart                 : 0x79b8000
      +0x004 HighPart                : -6035
      +0x000 u                       : __unnamed
      +0x000 QuadPart                : -25920000000000 

次に、 CriticalSectionTimeout 構造体サブフィールドを 2 レベル深く展開します。

0:000> dt nt!_PEB CriticalSectionTimeout.. 7ffdf000 
   +0x070 CriticalSectionTimeout   :  0xffffe86d`079b8000
      +0x000 LowPart                  : 0x79b8000
      +0x004 HighPart                 : -6035
      +0x000 u                        :
         +0x000 LowPart                  : 0x79b8000
         +0x004 HighPart                 : -6035
      +0x000 QuadPart                 : -25920000000000 

次のコマンドは、アドレス 0x0100297Cにあるデータ型 MYTYPE1 のインスタンスを表示します。

0:000> dt 0x0100297c MYTYPE1 
   +0x000 a                : 22
   +0x004 b                : 43 '+'
   +0x006 c                : 0x0
   +0x008 d                : 0x0
   +0x00c gn               : [6] 0x0
   +0x024 ex               : 0x0 

次のコマンドは、アドレス 0x01002BE0に 10 個の ULONG の配列を表示します。

0:000> dt -ca10 ULONG 01002be0 
[0] 0x1001098
[1] 0x1
[2] 0xdead
[3] 0x7d0
[4] 0x1
[5] 0xcd
[6] 0x0
[7] 0x0
[8] 0x0
[9] 0x0 

次のコマンドは、前の表示を別のアドレスで続行します。 "ULONG" を再入力する必要はありません。

0:000> dt -ca4 . 01002d00 
Using sym ULONG
[0] 0x12
[1] 0x4ac
[2] 0xbadfeed
[3] 0x2 

型表示の例をいくつか次に示します。 次のコマンドは、モジュール thismodule の文字列 "MY" で始まるすべての型とグローバルを表示します。 アドレスのプレフィックスが付いたインスタンスは実際のインスタンスです。アドレスを持たないものは型定義です。

0:000> dt thismodule!MY* 
010029b8  thismodule!myglobal1
01002990  thismodule!myglobal2
          thismodule!MYCLASS1
          thismodule!MYCLASS2
          thismodule!MYCLASS3
          thismodule!MYTYPE3::u
          thismodule!MYTYPE1
          thismodule!MYTYPE3
          thismodule!MYTYPE3
          thismodule!MYFLAGS 

型の表示を実行する場合は、 -v オプションを使用して各項目のサイズを表示できます。 sサイズ オプションは、特定のサイズの項目のみを列挙するために使用できます。 ここでも、アドレスのプレフィックスが付いたインスタンスは実際のインスタンスです。アドレスを持たないものは型定義です。

0:001> dt -s 2 -v thismodule!* 
Enumerating symbols matching thismodule!*, Size = 0x2
Address   Size Symbol
           002 thismodule!wchar_t
           002 thismodule!WORD
           002 thismodule!USHORT
           002 thismodule!SHORT
           002 thismodule!u_short
           002 thismodule!WCHAR
00427a34   002 thismodule!numberOfShips
00427a32   002 thismodule!numberOfPlanes
00427a30   002 thismodule!totalNumberOfItems 

b オプションの例を次に示します。 構造体が展開され、構造体内の OwnerThreads 配列が展開されますが、 Flink および Blink リスト ポインターに従いません。

kd> dt nt!_ERESOURCE -b 0x8154f040 
   +0x000 SystemResourcesList :  [ 0x815bb388 - 0x816cd478 ]
      +0x000 Flink            : 0x815bb388
      +0x004 Blink            : 0x816cd478
   +0x008 OwnerTable       : (null)
   +0x00c ActiveCount      : 1
   +0x00e Flag             : 8
   +0x010 SharedWaiters    : (null)
   +0x014 ExclusiveWaiters : (null)
   +0x018 OwnerThreads     :
    [00]
      +0x000 OwnerThread      : 0
      +0x004 OwnerCount       : 0
      +0x004 TableSize        : 0
    [01]
      +0x000 OwnerThread      : 0x8167f563
      +0x004 OwnerCount       : 1
      +0x004 TableSize        : 1
   +0x028 ContentionCount  : 0
   +0x02c NumberOfSharedWaiters : 0
   +0x02e NumberOfExclusiveWaiters : 0
   +0x030 Address          : (null)
   +0x030 CreatorBackTraceIndex : 0
   +0x034 SpinLock         : 0

カーネル モードでの dt の例を次に示します。 次のコマンドを実行すると、 !process 0 0 のような結果が生成されます。

kd> dt nt!_EPROCESS -l ActiveProcessLinks.Flink -y Ima -yoi Uni 814856f0 
## ActiveProcessLinks.Flink at 0x814856f0

UniqueProcessId : 0x00000008
ImageFileName : [16] "System"

## ActiveProcessLinks.Flink at 0x8138a030

UniqueProcessId : 0x00000084
ImageFileName : [16] "smss.exe"

## ActiveProcessLinks.Flink at 0x81372368

UniqueProcessId : 0x000000a0
ImageFileName : [16] "csrss.exe"

## ActiveProcessLinks.Flink at 0x81369930

UniqueProcessId : 0x000000b4
ImageFileName : [16] "winlogon.exe"

.... 

リストの各要素に対してコマンドを実行する場合は、 !list 拡張子を使用します。

最後に、 dt -h コマンドには、 dt 構文を要約した短いヘルプ テキストが表示されます。