Cara Menggunakan GNU Debugger dalam Linux

GNU Debugger digunakan untuk menyahpepijat atur cara, untuk menganalisis ranap sistem, atau untuk melihat apa yang program itu lakukan pada titik tertentu. Ia telah dibangunkan oleh Projek GNU pada tahun 1980-an dan telah menjadi salah satu penyahpepijat baris arahan yang paling banyak digunakan serta salah satu perisian GNU yang paling popular.

Mari kita mula-mula menulis program C kecil yang kemudiannya akan kita debug. Untuk bermula, buat yang baharu .c fail menggunakan vim atau mana-mana editor pilihan anda:

ujian vim.c

Buat program C berikut:

#include int main() { int i = 5; apungan f = 5.5 i = i + 3; f = f + 2.2; printf("Nilai i dan f ialah: %d dan %f\n", i, f); pulangan 0; }

Tekan Melarikan diri untuk pergi ke mod arahan vim. Kemudian taip :wq untuk menyimpan program dan keluar.

Susun dan lihat jika program berjalan:

ujian gcc.c -o test ./test Nilai i dan f ialah: 8 dan 7.700000

Untuk mendayakan sokongan penyahpepijatan dalam program, kami menyusunnya dengan -g bendera. Jika bendera tidak digunakan, pengguna masih boleh menyahpepijat atur cara, walaupun dengan pilihan terhad.

ujian gcc.c -g -o ujian

Untuk memulakan penyahpepijatan fail boleh laku kami ujian dalam gdb, kami berlari:

ujian gdb

Ia akan membuka gdb konsol, di mana anda boleh menaip gdb arahan. Untuk melihat senarai arahan gunakan membantu perintah.

$(gdb) help Senarai kelas perintah: alias -- Alias ​​bagi titik putus perintah lain -- Membuat program berhenti pada titik tertentu data -- Memeriksa fail data -- Menentukan dan memeriksa dalaman fail -- Perintah penyelenggaraan tidak jelas -- Ciri kabur berjalan -- Menjalankan tindanan program -- Memeriksa status tindanan -- Sokongan pertanyaan status -- Titik jejak kemudahan sokongan -- Mengesan pelaksanaan program tanpa menghentikan program yang ditentukan pengguna -- Perintah yang ditentukan pengguna Taipkan "bantuan" diikuti dengan nama kelas untuk senarai arahan dalam kelas itu. Taip "help all" untuk senarai semua arahan. Taip "help" diikuti dengan nama arahan untuk dokumentasi penuh. Taip "perkataan apropos" untuk mencari arahan yang berkaitan dengan "perkataan". Singkatan nama perintah dibenarkan jika tidak jelas.

Anda kemudian boleh menaip bantu nama_kelas untuk melihat arahan kepunyaan kelas itu. Untuk mencari arahan menggunakan subrentetan, gunakan apropos subrentetan.

Untuk menetapkan titik putus apabila program memasuki fungsi, lari:

$(gdb) pecah utama

Di sini kami menetapkan titik putus pada satu-satunya fungsi dalam kod kami, i.e. utama. Gunakan arahan lari untuk melaksanakan program sehingga titik putus seterusnya, atau sehingga keluar.

$(gdb) lari

Untuk menetapkan titik putus pada lokasi tertentu dalam fungsi, gunakan:

rehat *utama + 4

Ini akan menyediakan titik putus pada baris ke-4 fungsi utama.

sekarang, untuk melangkah ke atas aliran program ke baris kod seterusnya, hanya jalankan langkah perintah.

$(gdb) langkah 5: terapung f = 5.5;

Untuk memaparkan kandungan pembolehubah, lari paparan .

$(gdb) paparan i 6: i = 5

Untuk mengubah suai kandungan pembolehubah, yang mungkin diperlukan untuk menganalisis larian program di bawah nilai tertentu pembolehubah, run set pembolehubah =Ungkapan.

$(gdb) tetapkan pembolehubah i=10 $(gdb) paparan i 7: i = 10

Di sini, 'Ungkapan' boleh berupa sebarang ungkapan yang sah (aritmetik / logik). Demi kesederhanaan kami hanya menetapkan nilai lain (10) kepada pembolehubah i.

Untuk mencetak kod pemasangan untuk program, gunakan arahan buka nama fungsi:

Gunakan hanya bukak untuk mencetak kod pemasangan untuk keseluruhan program. Perhatikan anak panah pada baris tertentu dalam kod pemasangan. Ia menandakan bahawa sesi penyahpepijatan sedang dijeda di lokasi memori tertentu (iaitu, baris kod itu).

Untuk melompat debugger pada baris kod tertentu, lari:

$(gdb) lompat *utama + 2 Meneruskan pada 0x400528. Titik putus 2, 0x000000000040052a dalam utama () pada ujian.c:3 3 int main() { 1: i = 2: f = 3: h = (kosong *) 0x0 4: utama = {int ()} 0x400526 5: i = 

Ini akan menjadikan penyahpepijat melompat pada lokasi memori baris ke-2 kod dalam fungsi utama. Ambil perhatian bahawa di sini saya melompat dari permulaan utama ke lokasi kedua secara langsung. Oleh itu, pembolehubah i tidak pernah ditetapkan, yang mengakibatkan ralat lontaran penyahpepijat bahawa ia tidak dapat mengakses kandungan memori pada alamat pembolehubah i.

Ini adalah beberapa arahan asas yang boleh membantu anda memulakan penyahpepijatan fail boleh laku dalam Linux. Kami harap anda mendapati maklumat di halaman ini berguna.