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.
Untuk gambaran umum utas dan proses di mesin debugger, lihat Utas dan Proses.
Ketika suatu peristiwa terjadi, utas peristiwa dan proses peristiwa ditetapkan pada utas dan proses (sistem operasi atau virtual) di mana peristiwa itu terjadi. Mereka dapat ditemukan menggunakan GetEventThread dan GetEventProcess, masing-masing.
Utas dan Proses Implisit
Dalam mode kernel men-debug mesin debugger akan menggunakan proses implisit untuk menentukan ruang alamat virtual mana yang akan digunakan saat melakukan terjemahan alamat virtual ke fisik -- misalnya, dalam metode VirtualToPhysical dan ReadVirtual. Ketika peristiwa terjadi, proses implisit diatur ke proses saat ini.
Proses implisit dapat diubah dengan menggunakan SetImplicitProcessDataOffset. Untuk menentukan proses implisit, gunakan GetImplicitProcessDataOffset.
Nota Saat mengatur titik henti selama sesi debugging kernel langsung, mesin debugger akan meneruskan alamat virtual titik henti ke target, dan target akan mengatur titik henti. Dalam hal ini, hanya konteks proses target yang digunakan saat menangani titik henti; nilai proses implisit tidak relevan.
Dalam mode debugging kernel, mesin debugger akan menggunakan utas implisit untuk menentukan beberapa register target. Ini termasuk tumpukan prosesor (lihat GetStackOffset), offset kerangka (lihat GetFrameOffset), dan offset instruksi (lihat GetInstructionOffset). Ketika sebuah peristiwa terjadi, utas implisit disetel ke utas yang sedang berjalan.
Thread implisit dapat diubah dengan menggunakan SetImplicitThreadDataOffset. Untuk menentukan utas implisit, gunakan GetImplicitThreadDataOffset.
Tidak semua register ditentukan oleh utas implisit. Beberapa register akan tetap sama ketika utas implisit diubah.
Peringatan Proses implisit dan utas implisit bersifat independen. Jika utas implisit bukan milik proses implisit, maka status pengguna dan sesi untuk utas implisit akan berada di ruang alamat virtual yang salah dan upaya untuk mengakses informasi ini akan menyebabkan kesalahan atau memberikan hasil yang salah. Masalah ini tidak terjadi saat mengakses memori kernel, karena alamat memori kernel konstan di semua ruang alamat virtual. Dengan demikian informasi untuk utas implisit yang terletak di memori kernel dapat diakses terlepas dari proses implisit.
Threads
ID utas mesin digunakan oleh mesin debugger untuk mengidentifikasi setiap utas sistem operasi dan setiap utas virtual untuk target.
Meskipun target dihentikan, setiap utas juga memiliki indeks yang terkait dengan proses tempatnya berada. Untuk proses apa pun, indeks utas pertama dalam proses adalah nol, dan indeks utas terakhir adalah jumlah utas dalam proses dikurangi satu. Jumlah utas dalam proses saat ini dapat ditemukan dengan menggunakan GetNumberThreads. Jumlah total utas dalam semua proses dalam target saat ini dapat ditemukan dengan menggunakan GetTotalNumberThreads.
ID utas mesin dan ID utas sistem untuk satu atau beberapa utas dalam proses saat ini dapat ditemukan dari indeks mereka dengan menggunakan GetThreadIdsByIndex.
Mesin menyimpan beberapa informasi tentang setiap utas. Informasi ini dapat dikueri untuk utas saat ini, dan dapat digunakan untuk menemukan ID utas mesin untuk utas.
ID thread sistem (penelusuran kesalahan mode pengguna saja)
ID utas sistem dari utas saat ini dapat ditemukan dengan menggunakan GetCurrentThreadSystemId. Untuk ID utas sistem tertentu, ID utas mesin yang sesuai dapat ditemukan dengan menggunakan GetThreadIdBySystemId.
blok lingkungan utas (TEB)
Alamat TEB untuk utas saat ini dapat ditemukan dengan menggunakan GetCurrentThreadTeb. Untuk alamat TEB tertentu, ID utas mesin yang sesuai dapat ditemukan dengan menggunakan GetThreadIdByTeb. Dalam penelusuran kesalahan mode kernel, TEB dari sebuah utas (virtual) merupakan TEB dari utas sistem yang dijalankan pada prosesor terkait ketika peristiwa terakhir terjadi.
penggeseran data
Dalam debugging mode pengguna, offset data dari sebuah utas (sistem) adalah lokasi TEB untuk utas tersebut. Dalam mode kernel men-debug offset data dari utas (virtual) adalah struktur KTHREAD untuk utas sistem yang berjalan pada prosesor yang sesuai ketika peristiwa terakhir terjadi. Offset data dari utas saat ini dapat ditemukan dengan menggunakan GetCurrentThreadDataOffset. Untuk offset data tertentu, ID utas mesin yang sesuai dapat ditemukan dengan menggunakan GetThreadIdByDataOffset.
pegangan sistem
Handle sistem utas saat ini dapat ditemukan dengan menggunakan GetCurrentThreadHandle. Untuk handle sistem tertentu, ID thread mesin yang sesuai dapat ditemukan dengan menggunakan GetThreadIdByHandle. Dalam debugging mode kernel, handle buatan dibuat untuk setiap proses (virtual). Handle ini hanya dapat digunakan dengan kueri API engine debugger.
Proses
ID proses mesin digunakan oleh mesin debugger untuk mengidentifikasi setiap proses sistem operasi dan setiap proses virtual untuk target.
Saat target dihentikan, setiap proses memiliki indeks yang relatif terhadap target. Indeks proses pertama dalam target adalah nol, dan indeks proses terakhir adalah jumlah proses dalam target minus satu. Jumlah proses dalam target saat ini dapat ditemukan dengan menggunakan GetNumberProcesses.
ID proses engine dan ID proses sistem untuk satu atau beberapa thread dalam target saat ini dapat ditemukan melalui indeksnya dengan menggunakan GetProcessIdsByIndex.
Mesin mempertahankan beberapa informasi tentang setiap proses. Informasi ini dapat diambil untuk proses yang sedang berjalan, dan dapat digunakan untuk menemukan ID proses dari mesin untuk suatu proses.
ID proses sistem (debugging mode pengguna saja)
ID proses sistem dari proses saat ini dapat ditemukan dengan menggunakan GetCurrentProcessSystemId. Untuk ID proses sistem tertentu, ID proses mesin yang sesuai dapat ditemukan dengan menggunakan GetProcessIdBySystemId.
blok lingkungan proses (PEB)
Alamat PEB untuk proses saat ini dapat ditemukan dengan menggunakan GetCurrentProcessPeb. Untuk alamat PEB tertentu, ID proses mesin yang sesuai dapat ditemukan dengan menggunakan GetProcessIdByPeb. Dalam debugging dalam mode kernel, PEB dari proses (virtual) adalah PEB dari proses sistem yang berjalan saat peristiwa terakhir terjadi.
offset data
Dalam debugging mode pengguna, offset data dari (sistem) proses adalah lokasi PEB (Process Environment Block) dari proses tersebut. Dalam penelusuran kesalahan mode kernel, offset data dari (proses) virtual adalah struktur KPROCESS untuk proses sistem yang aktif saat peristiwa terakhir terjadi. Offset data dari proses saat ini dapat ditemukan dengan menggunakan GetCurrentProcessDataOffset. Untuk offset data tertentu, ID proses mesin yang sesuai dapat ditemukan dengan menggunakan GetProcessIdByDataOffset.
pegangan sistem
Handel sistem dari proses saat ini dapat ditemukan dengan menggunakan GetCurrentProcessHandle. Untuk suatu handle sistem, ID proses mesin yang bersesuaian dapat ditemukan dengan menggunakan GetProcessIdByHandle. Dalam debugging mode kernel, peganggan buatan dibuat untuk proses (virtual). Pegangan ini hanya dapat digunakan dengan kueri mesin debug.
Peristiwa
Dalam debugging mode pengguna secara langsung, setiap kali utas dibuat atau dihentikan dalam target, peristiwa debugging pembuatan utas dan penghentian utas dihasilkan. Peristiwa ini menghasilkan pemanggilan ke metode callback IDebugEventCallbacks::CreateThread dan IDebugEventCallbacks::ExitThread.
Dalam debugging mode pengguna langsung, setiap kali proses dibuat atau keluar dalam target, peristiwa debugging untuk proses dibuat dan proses keluar dihasilkan. Peristiwa ini menghasilkan pemanggilan metode callback IDebugEventCallbacks::CreateProcess dan IDebugEventCallbacks::ExitProcess.
Untuk informasi selengkapnya tentang peristiwa, lihat Memantau Peristiwa.
Informasi Tambahan
Untuk informasi selengkapnya tentang utas dan proses, termasuk struktur TEB, KTHREAD, PEB, dan KPROCESS, lihat Microsoft Windows Internals oleh David Solomon dan Mark Russinovich.