!thread

!thread 拡張機能は、ETHREAD ブロックなど、ターゲット システム上のスレッドに関する概要情報を表示します。 このコマンドは、カーネル モードのデバッグ中にのみ使用できます。

この拡張コマンドは、.thread (レジスタ コンテキストの設定) コマンドと同じではありません。

構文

!thread [-p] [-t] [Address [Flags]]

パラメーター

-p
スレッドを所有するプロセスに関する概要情報を表示します。

-t
このオプションを指定した場合、Address はスレッド アドレスではなくスレッド ID です。

住所
ターゲット コンピューター上のスレッドの 16 進アドレスを指定します。 Address が -1 または省略されている場合は、現在のスレッドを示します。

フラグ
表示する詳細レベルを指定します。 Flags には、以下のビットの任意の組み合わせを指定できます。 Flags が 0 の場合、最小限の情報のみが表示されます。 既定値は 0x6 です。

ビット 1 (0x2)
スレッドの待機状態を表示します。

ビット 2 (0x4)
ビット 1 (0x2) なしで使用した場合、このビットに効果はありません。 このビットをビット 1 と組み合わせて使用した場合、スレッドがスタック トレースと共に表示されます。

ビット 3 (0x8)
各関数に表示される情報に戻りアドレス、スタック ポインター、および (Itanium システムの) bsp レジスタ値を追加し、関数引数の表示を抑制します。

ビット 4 (0x10)
このコマンドの実行中、指定されたスレッドを所有するプロセスと同等のプロセス コンテキストを設定します。 これにより、スレッド スタックがより正確に表示されます。

DLL

Kdexts.dll

追加情報

カーネル モードのスレッドについては、「コンテキストの変更」および「プロセスとスレッドの制御」を参照してください。 プロセスとスレッドの分析の詳細については、『Microsoft Windows Internals』(Mark Russinovich、Alex Ionescu、David Solomon 共著) を参照してください。

解説

Windows 10 を使用した例を次に示します。

0: kd> !thread 0xffffcb088f0a4480            
THREAD ffffcb088f0a4480  Cid 0e34.3814  Teb: 0000001a27ca6000 Win32Thread: 0000000000000000 RUNNING on processor 0
Not impersonating
DeviceMap                 ffffb80842016c20
Owning Process            ffffcb08905397c0       Image:         MsMpEng.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount      182835891      Ticks: 0
Context Switch Count      5989           IdealProcessor: 3             
UserTime                  00:00:01.046
KernelTime                00:00:00.296
Win32 Start Address 0x00007ffb3b2fd1b0
Stack Init ffff95818476add0 Current ffff958184769d30
Base ffff95818476b000 Limit ffff958184765000 Call 0000000000000000
Priority 8 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5
Child-SP          RetAddr           : Args to Child                                                           : Call Site
fffff802`59858c68 fffff801`b56d24aa : ffffcb08`8fd68010 00000000`00000000 fffff802`58259600 00000000`00000008 : nt!DbgBreakPointWithStatus [d:\rs2\minkernel\ntos\rtl\amd64\debugstb.asm @ 130] 
fffff802`59858c70 ffffcb08`8fd68010 : 00000000`00000000 fffff802`58259600 00000000`00000008 ffffcb08`8f0a4400 : 0xfffff801`b56d24aa
fffff802`59858c78 00000000`00000000 : fffff802`58259600 00000000`00000008 ffffcb08`8f0a4400 00000000`00000019 : 0xffffcb08`8fd68010

!process などのコマンドを使用して、目的のスレッドのアドレスまたはスレッド ID を見つけます。

次の表では、!thread 表示の有用な情報について説明します。

パラメーター 意味

スレッド アドレス

THREAD という単語の後の 16 進数は ETHREAD ブロックのアドレスです。 前の例では、スレッド アドレスは 0xffffcb088f0a4480 です。

スレッド ID

Cid という単語の後の 2 つの 16 進数は、プロセス ID とスレッド ID です (プロセス ID.スレッド ID)。 前の例では、プロセス ID が 0x0e34、スレッド ID が 0x3814 です。

スレッド環境ブロック (TEB)

Teb という単語の後の 16 進数は、スレッド環境ブロック (TEB) のアドレスです。

Win32Thread

Win32Thread という単語の後の 16 進数は、Win32Thread のアドレスです。

スレッドの状態

スレッドの状態は RUNNING という単語で始まる行の末尾に表示されます。

所有プロセス

Owning Process という単語の後の 16 進数は、このスレッドを所有するプロセスの EPROCESS のアドレスです。

開始アドレス

Start Address という単語の後の 16 進数は、スレッドの開始アドレスです。 これはシンボリック形式で表示される場合があります。

ユーザー スレッド関数

Win32 Start Address という単語の後の 16 進数は、ユーザー スレッド関数のアドレスです。

優先順位

スレッドの優先度情報は、Priority という単語の後に表示されます。

スタック トレース

この表示の最後に、スレッドのスタック トレースが表示されます。