Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Perintah .thread menentukan utas mana yang akan digunakan untuk konteks register.
.thread [/p [/r] ] [/P] [/w] [Thread]
Parameter
/p
(Hanya penelusuran kesalahan langsung) Jika opsi ini disertakan dan Utas bukan nol, semua entri tabel halaman transisi (PTEs) untuk proses yang memiliki utas ini akan secara otomatis diterjemahkan ke alamat fisik sebelum akses. Ini dapat menyebabkan perlambatan, karena debugger harus mencari alamat fisik untuk semua memori yang digunakan oleh proses ini, dan sejumlah besar data mungkin perlu ditransfer di seluruh kabel debug. (Perilaku ini sama dengan . cache forcedecodeuser.)
Jika opsi /p disertakan dan Utas nol atau dihilangkan, terjemahan ini akan dinonaktifkan. (Perilaku ini sama dengan . cache noforcedecodeuser.)
/r
(Hanya penelusuran kesalahan langsung) Jika opsi /r disertakan bersama dengan opsi /p , simbol mode pengguna untuk proses yang memiliki utas ini akan dimuat ulang setelah proses dan konteks pendaftaran telah ditetapkan. (Perilaku ini sama dengan . muat ulang /user.)
/P
(Hanya penelusuran kesalahan langsung) Jika opsi ini disertakan dan Utas bukan nol, semua entri tabel halaman transisi (PTEs) akan secara otomatis diterjemahkan ke dalam alamat fisik sebelum akses. Tidak seperti opsi /p, ini menerjemahkan PTEs untuk semua proses mode pengguna dan mode kernel, tidak hanya proses yang memiliki utas ini. Ini dapat menyebabkan perlambatan, karena debugger harus mencari alamat fisik untuk semua memori yang digunakan, dan sejumlah besar data mungkin perlu ditransfer di seluruh kabel debug. (Perilaku ini sama dengan . cache forcedecodeptes.)
/w
(hanya debugging kernel 64-bit) Mengubah konteks aktif untuk utas ke konteks WOW64 32-bit. Utas yang ditentukan harus berjalan dalam proses yang memiliki status WOW64.
Benang
Alamat utas. Jika ini dihilangkan atau nol, konteks utas diatur ulang ke utas saat ini.
Lingkungan
| Item | Deskripsi |
|---|---|
| Mode | mode kernel saja |
| Target | live, crash dump |
| Platform | all |
Informasi Tambahan
Untuk informasi selengkapnya tentang konteks pendaftaran dan pengaturan konteks lainnya, lihat Mengubah Konteks.
Keterangan
Umumnya, ketika Anda melakukan penelusuran kesalahan kernel, satu-satunya register yang terlihat adalah yang terkait dengan utas saat ini.
Perintah .thread menginstruksikan debugger kernel untuk menggunakan utas yang ditentukan sebagai konteks register. Setelah perintah ini dijalankan, debugger akan memiliki akses ke register yang paling penting dan jejak tumpukan untuk utas ini. Konteks register ini bertahan hingga Anda mengizinkan target untuk menjalankan atau menggunakan perintah konteks register lain (.thread, .cxr, atau .trap). Lihat Mendaftarkan Konteks untuk detail selengkapnya.
Opsi /w hanya dapat digunakan dalam sesi debugging kernel 64-bit pada utas yang berjalan dalam proses yang memiliki status WOW64. Konteks yang diambil akan menjadi konteks terakhir yang diingat oleh WOW64; ini biasanya merupakan kode mode pengguna terakhir yang dijalankan oleh Thread. Opsi ini hanya dapat digunakan jika target berada dalam mode komputer asli. Misalnya, jika target berjalan pada komputer 64-bit yang meniru prosesor berbasis x86 menggunakan WOW64, opsi ini tidak dapat digunakan. Menggunakan opsi /w akan menyebabkan mode komputer beralih secara otomatis ke prosesor berbasis x86.
Perintah ini tidak benar-benar mengubah utas saat ini. Dengan kata lain, ekstensi seperti !thread dan !teb masih akan default ke utas saat ini jika tidak ada argumen yang digunakan dengannya.
Berikut adalah contohnya. Gunakan ekstensi !process untuk menemukan alamat utas yang diinginkan. (Dalam hal ini, !process 0 0 digunakan untuk mencantumkan semua proses, maka !process digunakan untuk kedua kalinya untuk mencantumkan semua utas untuk proses yang diinginkan.)
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS fe5039e0 SessionId: 0 Cid: 0008 Peb: 00000000 ParentCid: 0000
DirBase: 00030000 ObjectTable: fe529a88 TableSize: 145.
Image: System
.....
PROCESS ffaa5280 SessionId: 0 Cid: 0120 Peb: 7ffdf000 ParentCid: 01e0
DirBase: 03b70000 ObjectTable: ffaa4e48 TableSize: 23.
Image: winmine.exe
kd> !process ffaa5280
PROCESS ffaa5280 SessionId: 0 Cid: 0120 Peb: 7ffdf000 ParentCid: 01e0
DirBase: 03b70000 ObjectTable: ffaa4e48 TableSize: 23.
Image: winmine.exe
VadRoot ffaf6e48 Clone 0 Private 50. Modified 0. Locked 0.
DeviceMap fe502e88
Token e1b55d70
.....
THREAD ffaa43a0 Cid 120.3a4 Teb: 7ffde000 Win32Thread: e1b4fea8 WAIT: (WrUserRequest) UserMode Non-Alertable
ffadc6a0 SynchronizationEvent
Not impersonating
Owning Process ffaa5280
WaitTime (seconds) 24323
Context Switch Count 494 LargeStack
.....
Sekarang gunakan perintah .thread dengan alamat utas yang diinginkan. Ini mengatur konteks register dan memungkinkan Anda untuk memeriksa register penting dan tumpukan panggilan untuk utas ini.
kd> .thread ffaa43a0
Using context of thread ffaa43a0
kd> r
Last set context:
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000 edi=00000000
eip=80403a0d esp=fd581c2c ebp=fd581c60 iopl=0 nv up di pl nz na pe nc
cs=0000 ss=0000 ds=0000 es=0000 fs=0000 gs=0000 efl=00000000
0000:3a0d ?? ???
kd> k
*** Stack trace for last set context - .thread resets it
ChildEBP RetAddr
fd581c38 8042d61c ntoskrnl!KiSwapThread+0xc5
00001c60 00000000 ntoskrnl!KeWaitForSingleObject+0x1a1