Bagikan melalui


Men-debug Proses Mode Pengguna Menggunakan WinDbg Classic

Anda dapat menggunakan WinDbg untuk melampirkan ke proses yang sedang berjalan atau untuk menelurkan dan melampirkan ke proses baru.

Melampirkan ke Proses yang Sedang Berjalan

Ada beberapa cara untuk menggunakan WinDbg untuk melampirkan ke proses yang sedang berjalan. Terlepas dari metode yang Anda pilih, Anda akan memerlukan ID proses atau nama proses. ID proses adalah angka yang ditetapkan oleh sistem operasi. Untuk informasi selengkapnya tentang cara menentukan ID proses dan nama proses, lihat Menemukan ID Proses.

WinDbg Menu

Saat WinDbg dalam mode tidak aktif, Anda dapat melampirkan ke proses yang sedang berjalan dengan memilih Lampirkan ke Proses dari menu File atau dengan menekan F6.

Dalam kotak dialog Lampirkan ke Proses , pilih proses yang ingin Anda debug, dan pilih OK.

perintah

Di jendela Prompt Perintah, Anda dapat melampirkan ke proses yang sedang berjalan saat meluncurkan WinDbg. Gunakan salah satu perintah berikut:

  • windbg -p ProcessID
  • windbg -pn ProcessName

di mana ProcessID adalah ID Proses dari proses yang sedang berjalan atau ProcessName adalah nama proses yang sedang berjalan.

Untuk informasi selengkapnya tentang sintaks baris perintah, lihat Opsi Baris Perintah WinDbg.

Jendela Perintah Debugger

Jika WinDbg sudah men-debug satu atau beberapa proses, Anda dapat melampirkan ke proses yang sedang berjalan dengan menggunakan perintah .attach (Lampirkan ke Proses) di jendela Perintah Debugger.

Debugger selalu memulai beberapa proses target secara bersamaan, kecuali beberapa utas mereka dibekukan atau ditangguhkan.

Jika perintah .attach berhasil, debugger melampirkan ke proses yang ditentukan saat berikutnya debugger mengeluarkan perintah eksekusi. Jika Anda menggunakan perintah ini beberapa kali berturut-turut, eksekusi harus diminta oleh debugger sebanyak Anda menggunakan perintah ini.

Melampirkan ke Proses yang Berjalan Secara Noninvasif

Jika Anda ingin men-debug proses yang sedang berjalan dan hanya mengganggu minimal dalam eksekusinya, Anda harus men-debug proses secara noninvasif.

WinDbg Menu

Ketika WinDbg dalam mode tidak aktif, Anda dapat secara noninvasif men-debug proses yang sedang berjalan dengan memilih Lampirkan ke Proses dari menu File atau dengan menekan F6.

Saat kotak dialog Lampirkan ke Proses muncul, pilih kotak centang Noninvasif . Kemudian, pilih baris yang berisi ID proses dan nama yang Anda inginkan. (Anda juga dapat memasukkan ID proses di Kotak ID Proses.) Terakhir, pilih OK.

perintah

Di jendela Prompt Perintah, Anda dapat melampirkan ke proses yang sedang berjalan secara noninvasif saat meluncurkan WinDbg. Gunakan salah satu perintah berikut:

  • windbg -pv -p ProcessID
  • windbg -pv -pn ProcessName

Ada beberapa opsi baris perintah lain yang berguna. Untuk informasi selengkapnya tentang sintaks baris perintah, lihat Opsi Baris Perintah WinDbg.

Jendela Perintah Debugger

Jika debugger sudah aktif, Anda dapat secara noninvasif men-debug proses yang sedang berjalan dengan menggunakan perintah .attach -v (Lampirkan ke Proses) di jendela Perintah Debugger.

Anda dapat menggunakan perintah .attach jika debugger sudah men-debug satu atau beberapa proses secara invasif. Anda tidak dapat menggunakan perintah ini jika WinDbg tidak aktif.

Jika perintah .attach -v berhasil, debugger akan men-debug proses yang ditentukan saat berikutnya debugger mengeluarkan perintah eksekusi. Karena eksekusi tidak diizinkan selama debugging noninvasif, debugger tidak dapat secara noninvasif men-debug lebih dari satu proses pada satu waktu. Pembatasan ini juga berarti bahwa menggunakan perintah .attach -v mungkin membuat sesi debugging invasif yang ada kurang berguna.

Menelurkan Proses Baru

WinDbg dapat memulai aplikasi mode pengguna dan kemudian men-debug aplikasi. Aplikasi ditentukan berdasarkan nama. Debugger juga dapat secara otomatis melekat pada proses anak (proses tambahan yang dimulai oleh proses target asli).

Proses yang dibuat debugger (juga dikenal sebagai proses yang ditelurkan) berulah sedikit berbeda dari proses yang tidak dibuat debugger.

Alih-alih menggunakan API timbunan standar, proses yang dibuat debugger menggunakan tumpukan debug khusus. Anda dapat memaksa proses yang ditelurkan untuk menggunakan timbunan standar alih-alih tumpukan debug dengan menggunakan variabel lingkungan _NO_DEBUG_HEAP atau opsi baris perintah -hd.

Selain itu, karena aplikasi target adalah proses anak dari debugger, aplikasi ini mewarisi izin debugger. Izin ini mungkin memungkinkan aplikasi target untuk melakukan tindakan tertentu yang tidak dapat dilakukan sebaliknya. Misalnya, aplikasi target mungkin dapat memengaruhi proses yang dilindungi.

WinDbg Menu

Ketika WinDbg dalam mode tidak aktif, Anda dapat menelurkan proses baru dengan memilih Buka Dapat Dieksekusi dari menu File atau dengan menekan CTRL+E.

Saat kotak dialog Buka Yang Dapat Dieksekusi muncul, masukkan jalur lengkap file yang dapat dieksekusi dalam kotak Nama file, atau gunakan daftar Lihat di untuk memilih jalur dan nama file yang Anda inginkan.

Jika Anda ingin menggunakan parameter baris perintah apa pun dengan aplikasi mode pengguna, masukkan parameter tersebut di kotak Argumen . Jika Anda ingin mengubah direktori awal dari direktori default, masukkan jalur direktori di kotak Mulai direktori. Jika Anda ingin WinDbg melampirkan ke proses turunan, pilih kotak centang Proses anak debug juga .

Setelah Anda membuat pilihan, pilih Buka.

perintah

Di jendela Prompt Perintah, Anda dapat menelurkan proses baru saat meluncurkan WinDbg. Gunakan perintah berikut:

windbg [-o] ProgramName [Argumen]

Opsi -o menyebabkan debugger dilampirkan ke proses turunan. Ada beberapa opsi baris perintah lain yang berguna. Untuk informasi selengkapnya tentang sintaks baris perintah, lihat Opsi Baris Perintah WinDbg.

Jendela Perintah Debugger

Jika WinDbg sudah men-debug satu atau beberapa proses, Anda dapat membuat proses baru dengan menggunakan perintah .create (Create Process) di jendela Perintah Debugger.

Debugger akan selalu memulai beberapa proses target secara bersamaan, kecuali beberapa utas mereka dibekukan atau ditangguhkan.

Jika perintah .create berhasil, debugger membuat proses yang ditentukan saat berikutnya debugger mengeluarkan perintah eksekusi. Jika Anda menggunakan perintah ini beberapa kali berturut-turut, eksekusi harus diminta oleh debugger sebanyak Anda menggunakan perintah ini.

Anda dapat mengontrol direktori awal aplikasi dengan menggunakan perintah .createdir (Atur Direktori Proses yang Dibuat) sebelum .create. Anda dapat menggunakan perintah .createdir -I atau opsi baris perintah -noinh untuk mengontrol apakah aplikasi target mewarisi handel debugger.

Anda dapat mengaktifkan atau menonaktifkan penelusuran kesalahan proses anak dengan menggunakan perintah .childdbg (Proses Anak Debug).

Memasang kembali ke Proses

Jika debugger berhenti merespons atau membeku, Anda dapat melampirkan debugger baru ke proses target. Untuk informasi selengkapnya tentang cara melampirkan debugger dalam situasi ini, lihat Memasang kembali ke Aplikasi Target.