Bagikan melalui


Melakukan debugging proses dengan User-Mode 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.

Command Prompt

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

  • windbg -pProcessID
  • windbg -pnNamaProses

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 Command-Line 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.attachberhasil, 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.

Menghubungkan 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 dalam kotak ID Proses.) Terakhir, pilih OK.

Command Prompt

Di jendela Prompt Perintah, Anda dapat mengaitkan dengan proses yang sedang berjalan secara noninvasif saat memulai WinDbg. Gunakan salah satu perintah berikut:

  • -pv windbg -pProcessID
  • -pv windbg -pnProcessName

Ada beberapa opsi baris perintah lain yang berguna. Untuk informasi selengkapnya tentang sintaks baris perintah, lihat Opsi Command-Line 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 penelusuran kesalahan invasif yang ada kurang berguna.

Meluncurkan Proses Baru

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

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

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

Selain itu, karena aplikasi sasaran adalah proses turunan dari debugger, aplikasi ini mewarisi hak akses 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

Saat WinDbg dalam mode tidak aktif, Anda dapat menelurkan proses baru dengan memilih Buka yang dapat dijalankan 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 direktori Mulai. Jika Anda ingin WinDbg mengaitkan dengan proses turunan, pilih kotak centang Debug juga untuk proses turunan.

Setelah Anda membuat pilihan, pilih Buka.

Command Prompt

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

windbg [-o]ProgramName[argumen]

Opsi -o menyebabkan debugger terhubung ke sebuah proses turunan. Ada beberapa opsi baris perintah lain yang berguna. Untuk informasi selengkapnya tentang sintaks baris perintah, lihat Opsi Command-Line 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 menjalankan beberapa proses target secara bersamaan, kecuali jika 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 (Set Created Process Directory) sebelum .create. Anda dapat menggunakan perintah .createdir -I atau opsi baris perintah -noinh untuk mengendalikan apakah aplikasi target mewarisi handle debugger.

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

Menghubungkan 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 ulang ke Aplikasi Target.