PengawakutuTampilan antarmuka grafis dari pengawakutu Winpdb yang digunakan untuk menguji kode program.
Pengawakutu (bahasa Inggris:debuggercode: en is deprecated ) adalah program komputer khusus yang digunakan oleh pemrogram untuk menguji, memantau, dan melakukan pengawakutuan terhadap program lainnya (yang disebut sebagai program target).
Kode program yang diujikan biasanya dijalankan di bawah kontrol pengawakutu, sehingga alur eksekusinya dapat direkayasa. Program target dapat dijalankan pada sebuah arsitektur asli atau melalui simulator set instruksi (instruction set simulator/ISS) untuk mensimulasikan lingkungan perangkat keras tertentu. Beberapa pengawakutu modern menawarkan dua mode operasi, yaitu simulasi parsial atau simulasi penuh, untuk membatasi dampak pengujian terhadap stabilitas sistem operasi utama.
Ketika sebuah program mengalami mogok (crash) akibat adanya kutu pemrograman, pengawakutu dapat menunjukkan lokasi persis baris kode yang memicu kegagalan tersebut. Hal ini umumnya terjadi jika program mencoba mengeksekusi instruksi ilegal yang tidak tersedia pada CPU, atau ketika program melakukan pelanggaran akses dengan mencoba membaca atau menulis ke lokasi memori yang dilindungi.
Fitur utama
Sebuah pengawakutu umumnya menyediakan kendali penuh atas jalannya eksekusi program target melalui fitur-fitur berikut:
Titik henti (Breakpoint): Menghentikan eksekusi program secara temporer pada lokasi atau kondisi tertentu agar pemrogram dapat memeriksa status sistem saat itu.
Eksekusi bertahap (Stepping): Menjalankan kode program secara perlahan baris demi baris atau instruksi demi instruksi (single-stepping) untuk mengamati perubahan kondisi logika algoritme.
Pengubahan nilai dinamis: Mengizinkan pemrogram mengubah isi memori atau variabel di tengah jalannya eksekusi untuk menguji skenario kondisional tertentu tanpa harus mengompilasi ulang program.
Jenis pengawakutu
Berdasarkan tingkat abstraksi dan lingkungan kerjanya, pengawakutu dapat dikelompokkan menjadi:
Pengawakutu tingkat sumber (Source-level debugger)
Pengawakutu yang beroperasi langsung pada kode sumber yang ditulis oleh manusia (seperti bahasa C, C++, Java, atau Python). Alat ini mencocokkan instruksi mesin yang sedang berjalan dengan baris kode aslinya menggunakan simbol pengawakutuan (debugging symbols).
Pengawakutu tingkat mesin (Machine-level debugger)
Pengawakutu yang beroperasi pada instruksi bahasa rakitan (assembly) atau kode mesin tingkat rendah. Jenis ini sering digunakan dalam aktivitas rekayasa balik (reverse engineering) atau ketika kode sumber asli tidak tersedia.
Pengawakutu inti (Kernel debugger)
Pengawakutu khusus yang digunakan untuk menguji inti sistem operasi (kernel). Pengawakutu jenis ini memiliki hak akses tertinggi karena harus mampu menghentikan seluruh sistem operasi untuk memeriksa kegagalan fatal seperti Blue Screen of Death pada Windows atau Kernel panic pada Unix/Linux.
Pengawakutu perangkat keras (Hardware/Embedded debugger)
Perangkat lunak pembantu yang terhubung dengan modul perangkat keras eksternal (seperti antarmuka JTAG atau SWD) untuk melakukan pengawakutuan langsung pada sistem tertanam (embedded systems) dan mikrokontroler secara fisik.
Daftar pengawakutu yang populer
GNU Debugger (GDB): Pengawakutu standar untuk ekosistem perangkat lunak bebas yang mendukung banyak bahasa pemrograman dan arsitektur CPU.
LLDB: Pengawakutu berkinerja tinggi yang menjadi bagian dari proyek kompilator LLVM dan digunakan secara bawaan pada lingkungan pengembangan macOS dan iOS.
Microsoft Visual Studio Debugger: Pengawakutu terintegrasi di dalam IDE Visual Studio untuk pengembangan aplikasi berbasis Windows.
WinDbg: Alat pengawakutu multiguna dari Microsoft yang sering digunakan untuk menganalisis berkas crash dump dan melakukan pengawakutuan tingkat *kernel*.
Valgrind: Alat pemrograman yang utamanya digunakan untuk mendeteksi kebocoran memori (memory leak) dan memprofilkan memori pada sistem Linux.
Referensi
Sanjeev Kumar Aggarwal and M. Sarath Kumar, "Debuggers for Programming Languages". In The Compiler Design Handbook: Optimizations and Machine Code Generation. Edited by Y.N. Srikant and Priti Shankar. Boca Raton, Florida: CRC Press, 2003. pp.295–327.