!스레드

!thread 확장은 ETHREAD 블록을 포함하여 대상 시스템의 스레드에 대한 요약 정보를 표시합니다. 이 명령은 커널 모드 디버깅 중에만 사용할 수 있습니다.

이 확장 명령은 .thread(컨텍스트 등록 설정) 명령과 동일하지 않습니다.

구문

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

매개 변수

-p
스레드를 소유하는 프로세스에 대한 요약 정보를 표시합니다.

-t
이 옵션이 포함 되면 주소 는 스레드 주소가 아닌 스레드 ID입니다.

주소
대상 컴퓨터에서 스레드의 16진수 주소를 지정합니다. 주소가 -1이거나 생략되면 현재 스레드를 나타냅니다.

Flags
표시할 세부 수준을 지정합니다. 플래그 는 다음 비트의 조합일 수 있습니다. 플래그가 0이면 최소한의 정보만 표시됩니다. 기본값은 0x6.

비트 1(0x2)
스레드의 대기 상태를 표시합니다.

비트 2(0x4)
이 비트가 비트 1(0x2 없이 사용되는 경우 아무런 효과가 없습니다. 이 비트를 비트 1과 함께 사용하면 스레드가 스택 추적과 함께 표시됩니다.

비트 3(0x8)
반환 주소, 스택 포인터 및 (Itanium 시스템에서) bsp 레지스터 값을 각 함수에 대해 표시되는 정보에 추가하고 함수 인수의 표시를 표시하지 않습니다.

비트 4(0x10)
프로세스 컨텍스트를 이 명령의 기간 동안 지정된 스레드를 소유하는 프로세스와 동일하게 설정합니다. 이로 인해 스레드 스택을 보다 정확하게 표시할 수 있습니다.

DLL

Kdexts.dll

추가 정보

커널 모드의 스레드에 대한 자세한 내용은 컨텍스트 변경 및 프로세스 및 스레드 제어를 참조하세요. 프로세스 및 스레드 분석에 대한 자세한 내용은 Mark Russinovich, Alex Ionescu 및 David Solomon의 Microsoft Windows Internals를 참조하세요.

설명

다음은 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 display의 유용한 정보는 다음 표에 설명되어 있습니다.

매개 변수 의미

스레드 주소

THREAD라는 단어 뒤의 16진수는 ETHREAD 블록의 주소입니다. 앞의 예제에서 스레드 주소는 0xffffcb088f0a4480.

스레드 ID

Cid라는 단어 뒤의 두 16진수 숫자는 프로세스 ID 및 스레드 ID인 process ID.thread ID입니다. 앞의 예제에서 프로세스 ID는 0x0e34 스레드 ID는 0x3814.

TEB(스레드 환경 블록)

Teb이라는 단어 뒤의 16 진수는 TEB(스레드 환경 블록)의 주소입니다.

Win32Thread

Win32Thread라는 단어 뒤의 16진수는 Win32Thread의 주소입니다.

스레드 상태

스레드 상태는 RUNNING이라는 단어로 시작하는 줄의 끝에 표시됩니다.

소유 프로세스

Owning Process라는 단어 뒤의 16진수는 이 스레드를 소유하는 프로세스에 대한 EPROCESS의 주소입니다.

시작 주소

시작 주소라는 단어 뒤의 16진수는 스레드 시작 주소입니다. 기호 형식으로 표시될 수 있습니다.

사용자 스레드 함수

Win32 시작 주소라는 단어 뒤의 16진수 번호는 사용자 스레드 함수의 주소입니다.

우선 순위

스레드의 우선 순위 정보는 Priority라는 단어를 따릅니다.

스택 추적

스레드에 대한 스택 추적이 이 표시의 끝에 나타납니다.