!thread
!thread 拡張機能は、ETHREAD ブロックなど、ターゲット システム上のスレッドに関する概要情報を表示します。 このコマンドは、カーネル モードのデバッグ中にのみ使用できます。
この拡張コマンドは、.thread (レジスタ コンテキストの設定) コマンドと同じではありません。
構文
!thread [-p] [-t] [Address [Flags]]
パラメーター
-p
スレッドを所有するプロセスに関する概要情報を表示します。
-t
このオプションを指定した場合、Address はスレッド アドレスではなくスレッド ID です。
Address
ターゲット コンピューター上のスレッドの 16 進アドレスを指定します。 Address が -1 または省略されている場合は、現在のスレッドを示します。
Flags
表示する詳細レベルを指定します。 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 という単語の後に表示されます。 |
スタック トレース |
この表示の最後に、スレッドのスタック トレースが表示されます。 |