Cara Menggunakan GNU Debugger di Linux

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.