!스레드
!thread 확장은 ETHREAD 블록을 포함하여 대상 시스템의 스레드에 대한 요약 정보를 표시합니다. 이 명령은 커널 모드 디버깅 중에만 사용할 수 있습니다.
이 확장 명령은 .thread(컨텍스트 등록 설정) 명령과 동일하지 않습니다.
구문
!thread [-p] [-t] [Address [Flags]]
매개 변수
-p
스레드를 소유하는 프로세스에 대한 요약 정보를 표시합니다.
-t
이 옵션이 포함 되면 주소 는 스레드 주소가 아닌 스레드 ID입니다.
주소
대상 컴퓨터에서 스레드의 16진수 주소를 지정합니다. 주소가 -1이거나 생략되면 현재 스레드를 나타냅니다.
플래그
표시할 세부 수준을 지정합니다. 플래그 는 다음 비트의 조합일 수 있습니다. 플래그가 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라는 단어를 따릅니다. |
스택 추적 |
스레드에 대한 스택 추적이 이 표시의 끝에 나타납니다. |