GNU Debugger digunakan untuk men-debug program, menganalisis kerusakan, atau melihat apa yang dilakukan program pada titik tertentu. Ini dikembangkan oleh Proyek GNU pada 1980-an dan telah menjadi salah satu debugger baris perintah yang paling banyak digunakan serta salah satu perangkat lunak GNU paling populer.
Mari kita menulis program C kecil yang kemudian akan kita debug. Untuk memulai, buat yang baru .C
file menggunakan vim
atau editor pilihan Anda:
vim tes.c
Buat program C berikut:
#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2.2; printf("Nilai i dan f adalah : %d dan %f\n", i, f); kembali 0; }
tekan Melarikan diri
untuk pergi ke mode perintah vim. Kemudian ketik :wq
untuk menyimpan program dan keluar.
Kompilasi dan lihat apakah program berjalan:
gcc test.c -o test ./test Nilai i dan f adalah: 8 dan 7.700000
Untuk mengaktifkan dukungan debugging dalam suatu program, kami mengkompilasinya dengan -G
bendera. Jika bendera tidak digunakan, pengguna masih dapat men-debug program, meskipun dengan opsi terbatas.
tes gcc.c -g -o tes
Untuk memulai debug file yang dapat dieksekusi kami tes
di gdb
, kita lari:
tes gdb
Ini akan membuka gdb
konsol, tempat Anda dapat mengetik gdb
perintah. Untuk melihat daftar perintah gunakan Tolong
memerintah.
$(gdb) help Daftar kelas perintah: alias -- Alias dari perintah lain breakpoints -- Membuat program berhenti pada data titik tertentu -- Memeriksa file data -- Menentukan dan memeriksa file internal -- Perintah pemeliharaan tidak jelas -- Fitur tidak jelas berjalan -- Menjalankan program stack -- Memeriksa status stack -- Dukungan pertanyaan status -- Mendukung fasilitas tracepoints -- Menelusuri eksekusi program tanpa menghentikan program yang ditentukan pengguna -- Perintah yang ditentukan pengguna Ketik "help" diikuti dengan nama kelas untuk daftar perintah di kelas itu. Ketik "bantu semua" untuk daftar semua perintah. Ketik "help" diikuti dengan nama perintah untuk dokumentasi lengkap. Ketik "apropos word" untuk mencari perintah yang terkait dengan "word". Singkatan nama perintah diperbolehkan jika tidak ambigu.
Anda kemudian dapat mengetik bantu class_name
untuk melihat perintah milik kelas itu. Untuk mencari perintah menggunakan substring, gunakan tepat substring
.
Untuk mengatur breakpoint ketika program memasuki suatu fungsi, Lari:
$(gdb) istirahat utama
Di sini kita menetapkan breakpoint pada satu-satunya fungsi dalam kode kita, yaitu. utama
. Gunakan perintah Lari
untuk menjalankan program sampai breakpoint berikutnya, atau sampai keluar.
$(gdb) dijalankan
Untuk menyetel breakpoint di lokasi tertentu dalam suatu fungsi, menggunakan:
istirahat *utama + 4
Ini akan mengatur breakpoint pada baris ke-4 fungsi main.
Sekarang, untuk melangkahi aliran program ke baris kode berikutnya, jalankan saja melangkah
memerintah.
$(gdb) langkah 5: float f = 5,5;
Untuk menampilkan isi variabel, Lari menampilkan
.
$(gdb) menampilkan i 6: i = 5
Untuk mengubah isi variabel, yang mungkin diperlukan untuk menganalisis jalannya program di bawah nilai-nilai tertentu dari suatu variabel, run set variabel = Ekspresi
.
$(gdb) mengatur variabel i=10 $(gdb) menampilkan i 7: i = 10
Di sini, 'Ekspresi' dapat berupa ekspresi apa pun yang valid (aritmatika / logis). Demi kesederhanaan, kami hanya menetapkan nilai lain (10) ke variabel Saya
.
Untuk mencetak kode rakitan untuk program, gunakan perintah membongkar nama fungsi
:
Gunakan saja membongkar
untuk mencetak kode perakitan untuk seluruh program. Perhatikan panah pada baris tertentu dalam kode perakitan. Ini menunjukkan bahwa sesi debugging saat ini dijeda di lokasi memori tertentu (yaitu, baris kode itu).
Untuk melompat debugger pada baris kode tertentu, Lari:
$(gdb) melompat *main + 2 Melanjutkan pada 0x400528. Breakpoint 2, 0x000000000040052a di main () di test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i =
Ini akan membuat debugger melompat ke lokasi memori dari baris kode ke-2 dalam fungsi utama
. Perhatikan bahwa di sini saya melompat dari lokasi utama ke lokasi kedua secara langsung. Oleh karena itu, variabel Saya
tidak pernah disetel, yang menghasilkan kesalahan pelemparan debugger sehingga tidak dapat mengakses konten memori di alamat variabel Saya
.
Ini adalah beberapa perintah dasar yang dapat membantu Anda memulai dengan men-debug file yang dapat dieksekusi di Linux. Kami harap informasi di halaman ini bermanfaat bagi Anda.