GNU Debugger atau GDB Alat debugging kode sumber yang kuat untuk program Linux

GNU Debugger atau GDB Alat debugging kode sumber yang kuat untuk program Linux

Debugger memainkan peran penting dalam sistem pengembangan perangkat lunak apa pun. Tidak ada yang bisa menulis kode bebas bug sekaligus. Selama pengembangan, bug sedang dinaikkan dan perlu diselesaikan untuk peningkatan lebih lanjut. Sistem pengembangan tidak lengkap tanpa debugger. Mempertimbangkan komunitas pengembang open source, GNU Debugger adalah pilihan terbaik mereka. Ini juga digunakan untuk pengembangan perangkat lunak komersial pada platform tipe UNIX.

Debugging Code Sumber dengan GNU Debugger

GNU Debugger, juga dikenal sebagai GDB, memungkinkan kami untuk menyelinap melalui kode saat dieksekusi atau apa yang coba dilakukan program saat ini sebelum jatuh. GDB pada dasarnya membantu kita melakukan empat hal utama untuk menangkap kekurangan dalam kode sumber.

  1. Mulai program, menentukan argumen yang dapat memengaruhi perilaku umum.
  2. Hentikan program pada kondisi yang ditentukan.
  3. Periksa kecelakaan atau saat program dihentikan.
  4. Ubah kode dan bereksperimen dengan kode yang dimodifikasi secara instan.

Kami dapat menggunakan GDB untuk men -debug program yang ditulis C dan C ++ tanpa banyak usaha. Sampai sekarang dukungan untuk bahasa pemrograman lainnya seperti D, Modula-2, Fortran sebagian.

Memulai dengan GNU Debugger atau GDB

GDB dipanggil menggunakan GDB memerintah. Pada penerbitan GDB, Ini menampilkan beberapa informasi tentang platform dan mengantar Anda ke (GDB) Prompt seperti yang ditunjukkan di bawah ini.

[[email dilindungi] ~]# gdb
Output sampel
GNU GDB (GDB) Fedora 7.6.50.20130731-19.FC20 Hak Cipta (C) 2013 Free Software Foundation, Inc. Lisensi GPLV3+: GNU GPL versi 3 atau lebih baru ini adalah perangkat lunak gratis: Anda bebas untuk mengubah dan mendistribusikannya kembali. Tidak ada jaminan, sejauh diizinkan oleh hukum. Ketik "Tampilkan Salinan" dan "Tampilkan Garansi" untuk detailnya. GDB ini dikonfigurasi sebagai "x86_64-redhat-linux-gnu". Ketik "Tampilkan Konfigurasi" untuk detail konfigurasi. Untuk instruksi pelaporan bug, silakan lihat: . Temukan manual GDB dan sumber daya dokumentasi lainnya secara online di: . Untuk bantuan, ketik "bantuan". Ketik "Words Word" untuk mencari perintah yang terkait dengan "Word". (GDB)

Jenis membantu Daftar untuk keluar berbagai kelas perintah yang tersedia di dalam GDB. Jenis membantu diikuti dengan nama kelas untuk daftar perintah di kelas itu. Jenis membantu semua untuk daftar semua perintah. Singkatan nama perintah diizinkan jika mereka tidak ambigu. Misalnya, Anda dapat mengetik N bukannya mengetik Berikutnya atau C untuk melanjutkan dan seterusnya.

Perintah GDB yang paling umum digunakan

Biasanya digunakan Perintah GDB terdaftar di tabel berikut. Perintah ini akan digunakan dari prompt perintah GDB (GDB).

Memerintah Keterangan
berlari Mulailah Eksekusi Program
berhenti Keluar dari GDB
Cetak Expr Cetak ekspresi di mana expr Mungkin nama variabel juga
Berikutnya Pergi ke baris berikutnya
melangkah Masuk ke baris berikutnya
melanjutkan Lanjutkan dari garis saat ini hingga akhir program atau titik istirahat berikutnya

Perhatikan perbedaan antara kedua perintah melangkah Dan Berikutnya. Itu Berikutnya Perintah tidak masuk ke dalam fungsi jika baris berikutnya adalah panggilan fungsi. Sedangkan melangkah Perintah dapat masuk ke dalam fungsi di dalam dan melihat apa yang terjadi di sana.

Sesi Sampel dengan GDB

Pertimbangkan kode 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 angka pertama:"); scanf ("%d", & x); printf ("Masukkan nomor kedua:"); scanf ("%d", & y); z = jumlah (x, y); printf ("Jumlahnya adalah %d \ n \ n", z); kembali 0; 

Untuk men -debug file output yang kita butuhkan untuk mengkompilasi hal yang sama -G opsi untuk GCC sebagai berikut.

$ gcc -g jumlah.C -O jumlah

File output jumlah dapat dilampirkan ke GDB melalui salah satu dari 2 cara berikut:

1. Dengan menentukan file output sebagai argumen untuk GDB.

Jumlah $ GDB

2. Menjalankan file output di dalam gdb menggunakan mengajukan memerintah.

$ gdb (gdb) jumlah file

Itu daftar daftar perintah baris dalam file kode sumber dan memindahkan pointer. Jadi pertama daftar akan menampilkan 10 baris pertama dan berikutnya daftar menampilkan 10 berikutnya dan seterusnya.

(GDB) Daftar 1 #include 2 3 int jumlah (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 memulai eksekusi, keluarkan berlari memerintah. Sekarang program akan dieksekusi secara normal. Tapi kami lupa menempatkan beberapa breakpoint dalam kode sumber untuk debugging, benar? Breakpoint ini dapat ditentukan untuk fungsi atau di baris yang ditentukan.

(GDB) B Utama

Catatan: Saya telah menggunakan singkatan B untuk merusak.

Setelah menetapkan titik istirahat di fungsi utama, menjalankan kembali program akan berhenti di baris 11. Hal yang sama dapat diberlakukan jika nomor garis diketahui sebelumnya.

(gdb) b jumlah.C: 11

Sekarang melangkah melalui baris kode menggunakan Berikutnya atau N memerintah. Penting untuk dicatat itu Berikutnya Perintah tidak masuk ke dalam kode fungsi kecuali titik break diatur pada fungsi. Mari kita coba mencetak Perintah sekarang. Atur break point pada jumlah fungsi seperti di bawah ini.

(GDB) B SUM Breakpoint 1 di 0x4005aa: Jumlah File.C, baris 5. (GDB) R Program mulai: /root /sum masukkan angka pertama: 2 Masukkan angka 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 Lanjutan. Jumlahnya adalah 5 [inferior 1 (proses 3444) keluar secara normal]

Jika program yang sedang dijalankan memerlukan parameter baris perintah maka berikan hal yang sama bersama dengan berlari perintah sebagai.

(GDB) Jalankan… 

File perpustakaan bersama yang terkait dengan program yang sedang berjalan saat ini dapat terdaftar sebagai.

(GDB) Info Bagikan dari ke Syms Baca Perpustakaan Objek Bersama 0x00000035A6000B10 0x00000035A6019C70 Ya /LIB64 /LD-LINUX-X86-64.Jadi.2 0x00000035A641F560 0x00000035A6560BB4 YES /LIB64 /LIBC.Jadi.6

Variabel memodifikasi

GDB juga mampu memodifikasi variabel di seluruh pelaksanaan program. Ayo coba ini. Seperti disebutkan di atas set break point di baris 16 dan jalankan program.

(GDB) R Program mulai: /root /sum masukkan nomor pertama: 1 Masukkan angka kedua: 2 breakpoint 1, main () pada jumlah.C: 16 16 printf ("Jumlahnya adalah %d \ n \ n", z); (GDB) Set Z = 4 (GDB) C Lanjutan. Jumlahnya 4

Sekarang a = 1, B = 2 dan hasilnya seharusnya z = 3. Tapi di sini kami mengubah hasil akhir menjadi z = 4 di fungsi utama. Dengan cara ini debugging dapat dibuat lebih mudah menggunakan GDB.

Aktifkan/Nonaktifkan Breakpoints

Untuk mendapatkan daftar semua jenis breakpoints Info Breakpoints.

(GDB) Info Breakpoints Num Jenis Disp Enb Alamat Apa 1 Breakpoint Keep Y 0x00000000004005C2 Di Main at Sum.C: 11

Di sini hanya ada satu titik istirahat dan itu untuk. diaktifkan menonaktifkan breakpoints Tentukan nomor breakpoint bersama dengan cacat memerintah. Untuk mengaktifkan setelah itu gunakan memungkinkan memerintah.

(GDB) Nonaktifkan 1 (GDB) Info Breakpoints Num Jenis Disp ENB Alamat Apa 1 Breakpoint Keep N 0x00000000004005C2 Di Main AT pada jumlah.C: 11

Anda juga dapat menghapus breakpoints dengan menghapus memerintah.

Debugging Proses Menjalankan

Banyak proses berjalan di latar belakang dalam sistem GNU/Linux. Untuk men -debug proses berjalan terlebih dahulu kita perlu menemukan ID proses dari proses tertentu. pidof Perintah memberi Anda pid suatu proses.

$ pidof 

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

1. Dengan menentukan PID bersama dengan GDB.

$ gdb -p 

2. Menggunakan menempel Perintah dari GDB.

(GDB) Lampirkan 

Itu saja untuk saat ini. Ini hanya dasar -dasar GDB untuk mendapatkan awal yang baik dalam men -debug kode sumber dan jauh lebih dari hal -hal yang dijelaskan di atas. Misalnya, kami dapat men -debug menggunakan informasi tumpukan, variabel lingkungan dan banyak lagi. Cobalah untuk bermain -main dengan semua hal ini…