GNU Debugger atau GDB alat penyahpepijatan kod sumber yang kuat untuk program linux

GNU Debugger atau GDB alat penyahpepijatan kod sumber yang kuat untuk program linux

Debugger memainkan peranan penting dalam mana -mana sistem pembangunan perisian. Tidak ada yang boleh menulis kod bebas bug sekaligus. Semasa pembangunan, pepijat sedang dibangkitkan dan perlu diselesaikan untuk peningkatan selanjutnya. Sistem pembangunan tidak lengkap tanpa debugger. Memandangkan komuniti pemaju sumber terbuka, GNU Debugger adalah pilihan terbaik mereka. Ia juga digunakan untuk pembangunan perisian komersial pada platform jenis unix.

Debugging Code dengan GNU Debugger

GNU Debugger, juga dikenali sebagai GDB, membolehkan kita menyelinap melalui kod semasa ia dilaksanakan atau apa yang dicuba oleh program pada masa ini sebelum ia terhempas. GDB pada dasarnya membantu kita melakukan empat perkara utama untuk menangkap kelemahan dalam kod sumber.

  1. Mulakan program, menentukan hujah -hujah yang boleh menjejaskan tingkah laku umum.
  2. Hentikan program mengenai keadaan yang ditentukan.
  3. Periksa kemalangan atau ketika program dihentikan.
  4. Tukar kod dan bereksperimen dengan kod yang diubahsuai dengan serta -merta.

Kita boleh menggunakan program gdb untuk debug yang ditulis dalam C dan C ++ tanpa banyak usaha. Setakat ini sokongan untuk bahasa pengaturcaraan lain seperti D, Modula-2, FORTRAN adalah sebahagian.

Bermula dengan GNU Debugger atau GDB

GDB dipanggil menggunakan GDB perintah. Semasa mengeluarkan GDB, Ia memaparkan beberapa maklumat mengenai platform dan menjatuhkan anda ke (GDB) segera seperti yang ditunjukkan di bawah.

[[dilindungi e -mel] ~]# gdb
Output sampel
GNU GDB (GDB) Fedora 7.6.50.20130731-19.FC20 Hak Cipta (c) 2013 Yayasan Perisian Percuma, INC. Lesen GPLV3+: GNU GPL Versi 3 atau lebih baru ini adalah perisian percuma: anda bebas menukar dan mengagihkan semula. Tidak ada jaminan, setakat yang dibenarkan oleh undang -undang. Taip "Tunjukkan Penyalinan" dan "Tunjukkan Waranti" untuk maklumat lanjut. GDB ini dikonfigurasikan sebagai "x86_64-redhat-linux-gnu". Taipkan "Tunjukkan Konfigurasi" untuk perincian konfigurasi. Untuk arahan pelaporan pepijat, sila lihat: . Cari manual GDB dan sumber dokumentasi lain dalam talian di: . Untuk bantuan, taipkan "Bantuan". Taipkan "perkataan apropos" untuk mencari arahan yang berkaitan dengan "Word". (GDB)

Jenis tolong Senaraikan untuk mengeluarkan kelas arahan yang berbeza di dalam GDB. Jenis tolong diikuti dengan nama kelas untuk senarai arahan di kelas itu. Jenis bantu semua Untuk senarai semua arahan. Singkatan Nama Perintah dibenarkan jika mereka tidak jelas. Contohnya, anda boleh menaip n bukannya menaip Seterusnya atau c untuk Teruskan dan sebagainya.

Arahan GDB yang paling biasa digunakan

Selalu digunakan Perintah GDB disenaraikan dalam jadual berikut. Perintah ini akan digunakan dari arahan komando GDB (GDB).

Perintah Penerangan
Jalankan Mulakan pelaksanaan program
berhenti Berhenti gdb
cetak expr Cetak ungkapan di mana expr Mungkin juga nama yang berubah -ubah
Seterusnya Pergi ke baris seterusnya
langkah Langkah ke baris seterusnya
Teruskan Teruskan dari garis semasa hingga akhir program atau titik rehat seterusnya

Perhatikan perbezaan antara kedua -dua arahan langkah dan Seterusnya. The Seterusnya Perintah tidak masuk ke dalam fungsi jika baris seterusnya adalah panggilan fungsi. Sedangkan langkah Perintah boleh masuk ke dalam fungsi dan melihat apa yang berlaku di sana.

Sesi Contoh dengan GDB

Pertimbangkan kod sumber berikut.

// jumlah.c #include int sum (int a, int b) int c; C = A + B; kembali c;  int main () int x, y, z; printf ("\ nenter nombor pertama:"); scanf ("%d", & x); printf ("Masukkan nombor kedua:"); scanf ("%d", & y); z = jumlah (x, y); printf ("Jumlahnya adalah %d \ n \ n", z); kembali 0; 

Untuk menyahpepijat fail output, kita perlu menyusun perkara yang sama dengan -g pilihan untuk GCC seperti berikut.

$ gcc -g jumlah.C -O SUM

Fail output Jumlah boleh dilampirkan ke GDB melalui salah satu daripada 2 cara berikut:

1. Dengan menyatakan fail output sebagai hujah kepada GDB.

$ gdb jumlah

2. Menjalankan fail output di dalam gdb menggunakan fail perintah.

Jumlah fail $ GDB (GDB)

The senarai Perintah menyenaraikan baris dalam fail kod sumber dan menggerakkan penunjuk. Jadi pertama senarai akan memaparkan 10 baris pertama dan seterusnya senarai memaparkan 10 seterusnya dan sebagainya.

(gdb) Senarai 1 #include 2 3 int sum (int a, int b) 4 int c; 5 C = A + B; 6 kembali c; 7 8 9 int main () 10 int x, y, z;

Untuk memulakan pelaksanaan, mengeluarkan Jalankan perintah. Sekarang program ini dilaksanakan secara normal. Tetapi kami terlupa untuk meletakkan beberapa titik putus dalam kod sumber untuk debug, betul? Titik putus ini boleh ditentukan untuk fungsi atau pada baris yang ditentukan.

(GDB) B Utama

Catatan: Saya telah menggunakan singkatan b untuk rehat.

Setelah menetapkan titik pemecahan pada fungsi utama, mengubah program akan berhenti di baris 11. Perkara yang sama boleh berlaku sekiranya nombor baris diketahui sebelumnya.

(gdb) b jumlah.C: 11

Sekarang melangkah melalui baris kod menggunakan Seterusnya atau n perintah. Penting untuk diperhatikan bahawa Seterusnya Perintah tidak masuk ke dalam kod fungsi melainkan titik rehat ditetapkan pada fungsi. Mari cuba Cetak perintah sekarang. Tetapkan titik pecah pada jumlah fungsi seperti di bawah.

(GDB) b Jumlah Breakpoint 1 di 0x4005AA: Jumlah fail.c, baris 5. (GDB) R Program Permulaan: /Root /SUM Masukkan nombor pertama: 2 Masukkan nombor kedua: 3 Breakpoint 1, SUM (A = 2, B = 3) pada jumlah.C: 5 5 C = A + B; (GDB) P A $ 1 = 2 (GDB) P B $ 2 = 3 (GDB) C. Jumlahnya adalah 5 [inferior 1 (proses 3444) yang keluar secara normal]

Sekiranya program yang dijalankan memerlukan parameter baris arahan maka berikan yang sama bersama -sama dengan Jalankan perintah sebagai.

(GDB) berjalan .. 

Fail perpustakaan yang dikongsi yang berkaitan dengan program berjalan semasa boleh disenaraikan sebagai.

(GDB) Saham Maklumat Dari SYMS Baca Perpustakaan Objek Berkongsi 0x00000035A6000B10 0x0000000035A6019C70 YES /LIB64 /LD-LINUX-X86-64.Jadi.2 0x00000035A641F560 0x00000035A6560BB4 Ya /lib64 /libc.Jadi.6

Mengubahsuai pembolehubah

GDB juga mampu mengubahsuai pembolehubah sepanjang pelaksanaan program. Mari cuba ini. Seperti yang disebutkan di atas titik pemecahan di baris 16 dan jalankan program.

(GDB) R Program Permulaan: /Root /SUM Masukkan nombor pertama: 1 Masukkan nombor kedua: 2 Breakpoint 1, Utama () pada jumlah.C: 16 16 printf ("Jumlahnya adalah %d \ n \ n", z); (GDB) Tetapkan Z = 4 (GDB) C. Jumlahnya ialah 4

Sekarang A = 1, B = 2 dan hasilnya harus z = 3. Tetapi di sini kita mengubah hasil akhir ke z = 4 dalam fungsi utama. Dengan cara ini debugging dapat dibuat lebih mudah menggunakan GDB.

Dayakan/Lumpuhkan Titik Break

Untuk mendapatkan senarai semua jenis titik putus Info Breakpoints.

(GDB) Info Breakpoints Num Type Disp ENB Alamat Apa 1 Breakpoint Simpan Y 0x000000000000004005C2.C: 11

Di sini hanya ada satu titik rehat dan ia adalah untuk. Diaktifkan Lumpuhkan titik putus Tentukan nombor titik putus bersama dengan Lumpuhkan perintah. Untuk membolehkan selepas itu menggunakan membolehkan perintah.

(GDB) Lumpuhkan 1 (GDB) Info Breakpoints Num Type Disp ENB Alamat Apa 1 Breakpoint Simpan N 0x0000000000004005C2.C: 11

Anda juga boleh memadamkan titik putus dengan Padam perintah.

Debugging Proses Running

Banyak proses berjalan di latar belakang dalam sistem GNU/Linux. Untuk debug proses berjalan terlebih dahulu dari semua yang kita perlukan untuk mencari proses proses proses tertentu. pidof Perintah memberi anda proses.

$ pidof 

Sekarang kita perlu melampirkan PID ini ke GDB. Terdapat 2 cara.

1. Dengan menentukan PID bersama dengan GDB.

$ gdb -p 

2. Menggunakan Lampirkan Perintah dari GDB.

(GDB) Lampirkan 

Itu sahaja buat masa ini. Ini hanya asas -asas GDB untuk mendapatkan permulaan yang baik dalam kod sumber debug dan ia lebih banyak daripada perkara yang dijelaskan di atas. Contohnya, kita boleh debug menggunakan maklumat stack, pembolehubah persekitaran dan banyak lagi. Cuba bermain -main dengan semua barangan ini ..