Sebuah
debugger atau debugging tool adalah program komputer yang digunakan untuk
menguji dan men-debug program lain (program "target"). Kode untuk
diperiksa mungkin alternatif dapat berjalan pada instruksi set simulator (ISS)
, sebuah teknik yang memungkinkan kekuatan besar dalam kemampuannya untuk
menghentikan ketika kondisi tertentu yang dihadapi tetapi biasanya akan sedikit
lebih lambat dari mengeksekusi kode secara langsung pada yang sesuai ( atau
sama) prosesor. Beberapa debugger menawarkan dua mode operasi-penuh atau
parsial simulasi-untuk membatasi dampak ini.
" kecelakaan "yang terjadi ketika program tidak bisa biasanya
berlanjut karena bug pemrograman . Sebagai contoh, program ini mungkin telah
mencoba untuk menggunakan instruksi tidak tersedia pada versi saat ini dari CPU
atau mencoba untuk mengakses tersedia atau dilindungi memori . Ketika program
"crash" atau mencapai kondisi preset, debugger biasanya menunjukkan
lokasi dalam kode asli jika sumber-level debugger atau debugger simbolik,
biasanya sekarang terlihat di lingkungan pengembangan terintegrasi . Jika itu
adalah tingkat rendah debugger atau debugger mesin-bahasa itu menunjukkan garis
dalam pembongkaran (kecuali juga memiliki akses online ke kode sumber asli dan
dapat menampilkan bagian yang sesuai kode dari perakitan atau kompilasi).
Biasanya,
debugger menawarkan prosesor query, simbol penyelesai, ekspresi interpreter,
dan dukungan men-debug antarmuka di tingkat atas. Debugger juga menawarkan
fungsi yang lebih canggih seperti menjalankan program langkah demi langkah
(single-loncatan atau program animasi ), menghentikan (melanggar) (berhenti
program untuk memeriksa keadaan saat ini) pada beberapa peristiwa atau
instruksi tertentu melalui suatu breakpoint , dan melacak nilai-nilai variabel.
Beberapa debugger memiliki kemampuan untuk memodifikasi program negara ketika
sedang berjalan. Hal ini juga mungkin untuk melanjutkan eksekusi di lokasi yang
berbeda dalam program untuk memotong kecelakaan atau kesalahan logis.
Fungsi
yang sama yang membuat debugger berguna untuk menghilangkan bug memungkinkan
untuk digunakan sebagai perangkat lunak retak alat untuk menghindari
perlindungan salinan , manajemen hak digital, dan fitur perlindungan perangkat
lunak lain. Sering juga membuatnya berguna sebagai alat verifikasi umum,
cakupan kesalahan , dan kinerja analyzer , terutama jika panjang instruksi jalur
yang akan ditampilkan.
Kebanyakan
mesin debugging mainstream, seperti gdb dan dbx , menyediakan berbasis konsol
antarmuka baris perintah . Debugger depan berakhir ekstensi populer untuk debugger
mesin yang menyediakan IDE integrasi, program animasi , dan fitur visualisasi.
Beberapa awal mainframe debugger seperti Oliver dan SIMON disediakan fungsi
yang sama ini untuk IBM System/360 dan sistem operasi kemudian, selama lalu
sebagai tahun 1970-an.
Reverse debugging
Beberapa
debugger mencakup fitur yang disebut "debugging terbalik", juga
dikenal sebagai "debugging sejarah" atau "mundur
debugging". Debugger ini memungkinkan untuk langkah eksekusi sebuah
program mundur dalam waktu. Berbagai debugger menyertakan fitur ini. Visual
Studio Ultimate Edition debugger (2010 dan atas) menawarkan debugging terbalik
untuk C #, Visual Basic. NET, dan beberapa bahasa lain, tapi tidak C + +.
Debugger lain dengan fitur termasuk gdb 7.0 dan atas, " Mahatahu Debugger
"untuk Java, dan berbagai [4] dari debugger lainnya. Reverse debugging
sangat berguna untuk beberapa jenis masalah, tapi masih belum umum digunakan
belum.
Ketergantungan Bahasa
Beberapa
debugger beroperasi pada bahasa tertentu tunggal sementara yang lain dapat
menangani beberapa bahasa secara transparan. Sebagai contoh jika program
sasaran utama ditulis dalam COBOL tetapi panggilan bahasa assembly subrutin dan
PL / 1 subrutin, debugger mungkin harus dinamis beralih mode untuk
mengakomodasi perubahan dalam bahasa yang terjadi.
Perlindungan memori
Beberapa
debugger juga menggabungkan perlindungan memori untuk menghindari pelanggaran
penyimpanan seperti buffer overflow . Hal ini mungkin sangat penting dalam
proses transaksi lingkungan dimana memori dinamis dialokasikan dari memori
'kolam' pada tugas dengan dasar tugas.
Dukungan hardware untuk
debugging
Kebanyakan
mikroprosesor modern memiliki setidaknya satu dari fitur ini di mereka desain
CPU untuk membuat debugging lebih mudah:
- dukungan
hardware untuk single-melangkah program, seperti bendera perangkap .
- Sebuah
set instruksi yang memenuhi persyaratan virtualisasi Goldberg Popek dan
membuatnya lebih mudah untuk menulis perangkat lunak debugger yang berjalan
pada CPU yang sama sebagai perangkat lunak yang sedang debugged, CPU tersebut
dapat menjalankan loop dalam program yang diuji dengan kecepatan penuh, dan
masih tetap di bawah kontrol debugger.
- In-System
Programming memungkinkan debugger hardware eksternal untuk memprogram ulang
sistem yang diuji (misalnya, menambahkan atau menghapus instruksi breakpoints).
Banyak sistem dengan dukungan ISP tersebut juga memiliki dukungan debug
hardware lainnya.
- Dukungan
hardware untuk kode dan data breakpoints , seperti alamat pembanding dan data
nilai pembanding atau, dengan jauh lebih banyak pekerjaan yang terlibat,
halaman kesalahan hardware.
- JTAG
akses ke interface debug hardware seperti pada arsitektur ARM prosesor atau
menggunakan Nexus perintah set. Prosesor yang digunakan dalam embedded system
biasanya memiliki dukungan JTAG men-debug luas.
- Microcontrollers
dengan sesedikit enam pin perlu menggunakan pengganti pin-hitungan rendah untuk
JTAG, seperti BDM , Spy-Bi-Wire , atau debugWIRE pada Atmel AVR . DebugWIRE,
misalnya, menggunakan sinyal dua arah pada pin RESET
No comments:
Post a Comment