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.
Sebelum menemukan proses yang gagal, pastikan Anda berada dalam konteks prosesor penerimaan. Untuk menentukan prosesor yang menerima, gunakan ekstensi !pcr pada setiap prosesor dan cari prosesor yang penangan pengecualiannya telah dimuat. Penangan pengecualian prosesor yang menerima memiliki alamat selain 0xFFFFFFFF.
Misalnya, karena alamat NtTib.ExceptionList pada prosesor ini, 0xFFFFFFFF, ini bukan prosesor dengan prosesor yang gagal:
0: kd> !pcr
PCR Processor 0 @ffdff000
NtTib.ExceptionList: ffffffff
NtTib.StackBase: 80470650
NtTib.StackLimit: 8046d860
NtTib.SubSystemTib: 00000000
NtTib.Version: 00000000
NtTib.UserPointer: 00000000
NtTib.SelfTib: 00000000
SelfPcr: ffdff000
Prcb: ffdff120
Irql: 00000000
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: 80036400
GDT: 80036000
TSS: 80257000
CurrentThread: 8046c610
NextThread: 00000000
IdleThread: 8046c610
DpcQueue:
Namun, hasil untuk Prosesor 1 cukup berbeda. Dalam hal ini, nilai NtTib.ExceptionList adalah f0823cc0, bukan 0xFFFFFFFF, menunjukkan bahwa ini adalah prosesor tempat pengecualian terjadi.
0: kd> ~1
1: kd> !pcr
PCR Processor 1 @81497000
NtTib.ExceptionList: f0823cc0
NtTib.StackBase: f0823df0
NtTib.StackLimit: f0821000
NtTib.SubSystemTib: 00000000
NtTib.Version: 00000000
NtTib.UserPointer: 00000000
NtTib.SelfTib: 00000000
SelfPcr: 81497000
Prcb: 81497120
Irql: 00000000
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: 8149b0e8
GDT: 8149b908
TSS: 81498000
CurrentThread: 81496d28
NextThread: 00000000
IdleThread: 81496d28
DpcQueue:
Ketika Anda berada dalam konteks prosesor yang benar, ekstensi !process menampilkan proses yang sedang berjalan.
Bagian paling menarik dari dump proses adalah:
Waktu (nilai tinggi menunjukkan bahwa proses mungkin pelakunya).
Jumlah handel (ini adalah angka dalam tanda kurung setelah ObjectTable di entri pertama).
Status utas (banyak proses memiliki beberapa utas). Jika proses saat ini menganggur, kemungkinan mesin benar-benar menganggur atau digantung karena beberapa masalah yang tidak biasa.
Meskipun menggunakan ekstensi !process 0 7 adalah cara terbaik untuk menemukan masalah pada sistem gantung, terkadang terlalu banyak informasi untuk difilter. Sebagai gantinya, gunakan !process 0 0 dan kemudian !process pada handel proses untuk CSRSS dan proses mencurigakan lainnya.
Saat menggunakan !process 0 7, banyak utas mungkin ditandai "tumpukan kernel bukan residen" karena tumpukan tersebut di-page out. Jika halaman tersebut masih dalam cache yang sedang dalam transisi, Anda bisa mendapatkan informasi lebih lanjut dengan menggunakan decodepte .cache sebelum !process 0 7:
kd> .cache decodeptes
kd> !process 0 7
Jika Anda dapat mengidentifikasi proses yang gagal, gunakan !process <process> 7 untuk menampilkan tumpukan kernel untuk setiap utas dalam proses. Output ini dapat mengidentifikasi masalah dalam mode kernel dan mengungkapkan apa yang dipanggil proses tersangka.
Selain !process, ekstensi berikut dapat membantu menentukan penyebab komputer yang tidak responsif:
| Ekstensi | Efek |
|---|---|
Mengidentifikasi utas yang siap dijalankan, dalam urutan prioritas. |
|
Mengidentifikasi kunci sumber daya yang ditahan, jika ada kebuntuan dengan waktu ritel habis. |
|
Memeriksa penggunaan memori virtual. |
|
Menentukan apakah satu jenis alokasi kumpulan tidak proporsional besar (diperlukan penandaan kumpulan). |
|
Memeriksa status memori fisik. |
|
Memeriksa validitas timbunan. |
|
Mencari kumpulan yang tidak dipagasi untuk IRP aktif. |
Jika informasi yang diberikan tidak menunjukkan kondisi yang tidak biasa, coba atur titik henti di ntoskrnl! KiSwapThread untuk menentukan apakah prosesor terjebak dalam satu proses atau apakah proses tersebut masih menjadwalkan proses lain. Jika tidak macet, atur titik henti dalam fungsi umum, seperti NtReadFile, untuk menentukan apakah komputer terjebak dalam jalur kode tertentu.