Bagikan melalui


Men-debug Beberapa Target

Anda dapat men-debug beberapa file cadangan atau aplikasi mode pengguna langsung secara bersamaan. Setiap target berisi satu atau beberapa proses, dan setiap proses berisi satu atau beberapa utas.

Target ini juga dikelompokkan ke dalam sistem. Sistem adalah seperangkat target yang dikelompokkan bersama untuk memudahkan identifikasi dan manipulasi. Sistem didefinisikan sebagai berikut:

  • Setiap file cadangan mode kernel atau mode pengguna adalah sistem terpisah.

  • Ketika Anda men-debug aplikasi mode pengguna langsung di komputer yang berbeda (dengan menggunakan server proses, seperti Dbgsrv), setiap aplikasi adalah sistem terpisah.

  • Saat Anda men-debug aplikasi mode pengguna langsung di komputer lokal, aplikasi digabungkan ke dalam satu sistem.

Sistem saat ini atau aktif adalah sistem yang sedang Anda debug.

Memperoleh Beberapa Target

Target pertama diperoleh dengan cara yang biasa.

Anda dapat men-debug aplikasi mode pengguna langsung tambahan dengan menggunakan perintah .attach (Lampirkan ke Proses) atau .create (Create Process), diikuti oleh perintah g (Go).

Anda dapat men-debug file cadangan tambahan dengan menggunakan perintah .opendump (Open Dump File), diikuti oleh perintah g (Go). Anda juga dapat membuka beberapa file cadangan saat debugger dimulai. Untuk membuka beberapa file cadangan, sertakan beberapa sakelar -z dalam perintah, masing-masing diikuti dengan nama file yang berbeda.

Anda dapat menggunakan perintah sebelumnya meskipun prosesnya berada pada sistem yang berbeda. Anda harus memulai server proses pada setiap sistem lalu menggunakan parameter -premote dengan .attach atau .create untuk mengidentifikasi server proses yang tepat. Jika Anda menggunakan perintah .attach atau .create lagi tanpa menentukan parameter -premote, debugger melampirkan ke, atau membuat, proses pada sistem saat ini.

Memanipulasi Sistem dan Target

Ketika penelusuran kesalahan dimulai, sistem saat ini adalah yang terakhir dilampirkan oleh debugger. Jika terjadi pengecualian, sistem saat ini beralih ke sistem tempat pengecualian ini terjadi.

Untuk menutup satu target dan terus men-debug target lainnya, gunakan perintah .kill (Kill Process). Anda dapat menggunakan perintah .detach (Lepas dari Proses) atau Debug WinDbg | Lepaskan perintah menu Debuggee sebagai gantinya. Perintah ini melepaskan debugger dari target tetapi membiarkan target berjalan.

Untuk mengontrol penelusuran kesalahan beberapa sistem, Anda dapat menggunakan metode berikut:

Dengan menggunakan perintah ini untuk memilih sistem saat ini, dan dengan menggunakan perintah standar untuk memilih proses dan utas saat ini, Anda dapat menentukan konteks perintah yang menampilkan memori dan mendaftar.

Namun, Anda tidak dapat memisahkan eksekusi proses ini. Perintah g (Go) selalu menyebabkan semua target dijalankan bersama-sama.

Catatan Ada komplikasi, ketika Anda men-debug target langsung dan target cadangan bersama-sama, karena perintah bertingkah berbeda untuk setiap jenis debugging. Misalnya, jika Anda menggunakan perintah g (Go) ketika sistem saat ini adalah file cadangan, debugger mulai mengeksekusi, tetapi Anda tidak dapat memecah kembali ke debugger, karena perintah break tidak dikenali sebagai valid untuk debugging file cadangan.

Contoh

Untuk bekerja dengan tiga file cadangan secara bersamaan, Anda dapat menggunakan opsi -z untuk memuatnya saat WinDbg dimulai.

windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp

Untuk informasi selengkapnya, lihat Opsi Baris Perintah WinDbg. Anda juga dapat menggunakan perintah .opendump dan g (Go) untuk memuat file cadangan tambahan di debugger.

Menggunakan || (Status Sistem) perintah untuk mengonfirmasi bahwa ketiga sistem ada.

||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   1 User mini dump: C:\paint.dmp
   2 User mini dump: c:\calc.dmp

Gunakan perintah g (Go) untuk menyelesaikan pemuatan file cadangan.

||0:0:007> g

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*
Symbol search path is: srv*
Executable search path is: 
Windows 10 Version 15063 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Debug session time: Fri Jun  9 15:52:04.000 2017 (UTC - 7:00)
System Uptime: not available
Process Uptime: 0 days 0:03:44.000
...............................................................
This dump file has a breakpoint exception stored in it.
The stored exception information can be accessed via .ecxr.
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3

Kemudian gunakan ||s (Atur Sistem Saat Ini) untuk mengatur sistem saat ini ke sistem 1 lalu menampilkan sistem saat ini.

||1:1:017> ||1s
||1:1:017> ||
   0 User mini dump: c:\notepad.dmp
.  1 User mini dump: c:\paint.dmp
   2 User mini dump: c:\calc.dmp

Anda dapat menggunakan perintah .detach ketika Anda selesai melihat file cadangan saat ini.

||1:1:017> .detach
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3
Detached
||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   2 User mini dump: c:\calc.dmp

Sumber

Untuk informasi tambahan tentang penelusuran kesalahan, lihat sumber daya berikut.

Buku

  • Debugging Windows Tingkat Lanjut oleh Mario Hewardt dan Daniel Pravat

  • Di dalam Windows Debugging: Panduan Praktis untuk Men-debug dan Melacak Strategi di Windows oleh Tarik Soulami

  • Windows Internals oleh Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich dan David A. Solomon

Video

Alat Defrag Tampilkan WinDbg Episodes 13-29: </show/defrag-tools/>