Sebelumnya kita telah membahas dasar-dasar bagaimana menulis dan mengkompilasi program C dengan C Hello World Program.
Dalam artikel ini, mari kita bahas cara men-debug program c menggunakan gdb debugger dalam 6 langkah sederhana.
Tulis contoh program C dengan kesalahan untuk tujuan debugging
Untuk mempelajari debugging program C, mari kita buat program C berikut yang menghitung dan mencetak faktorial suatu bilangan. Namun program C ini mengandung beberapa kesalahan di dalamnya untuk tujuan debugging kami.
$ vim factorial.c # include <stdio.h> int main() { int i, num, j; printf ("Enter the number: "); scanf ("%d", &num ); for (i=1; i<num; i++) j=j*i; printf("The factorial of %d is %d\n",num,j); }
$ cc factorial.c $ ./a.out Enter the number: 3 The factorial of 3 is 12548672
Mari kita debugnya sambil meninjau perintah yang paling berguna di gdb.
Langkah 1. Kompilasi program C dengan opsi debugging -g
Kompilasi program C Anda dengan opsi -g. Ini memungkinkan kompiler untuk mengumpulkan informasi debug.
$ cc -g factorial.c
Catatan:Perintah di atas membuat file a.out yang akan digunakan untuk debugging seperti yang ditunjukkan di bawah ini.
Langkah 2. Luncurkan gdb
Luncurkan C debugger (gdb) seperti yang ditunjukkan di bawah ini.
$ gdb a.out
Langkah 3. Siapkan break point di dalam program C
Syntax: break line_number
Format lain:
- istirahat [nama_file]:nomor_baris
- istirahat [nama_file]:nama_fungsi
Menempatkan break point dalam program C, di mana Anda mencurigai adanya kesalahan. Saat menjalankan program, debugger akan berhenti di titik jeda, dan memberi Anda perintah untuk melakukan debug.
Jadi sebelum memulai program, mari kita tempatkan break point berikut di program kita.
break 10 Breakpoint 1 at 0x804846f: file factorial.c, line 10.
Langkah 4. Jalankan program C di gdb debugger
run [args]
Anda dapat mulai menjalankan program menggunakan perintah run di debugger gdb. Anda juga dapat memberikan argumen baris perintah ke program melalui run args. Contoh program yang kita gunakan di sini tidak memerlukan argumen baris perintah, jadi mari kita jalankan, dan mulai eksekusi program.
run Starting program: /home/sathiyamoorthy/Debugging/c/a.out
Setelah Anda menjalankan program C, program tersebut akan dijalankan hingga break point pertama, dan memberi Anda prompt untuk debugging.
Breakpoint 1, main () at factorial.c:10 10 j=j*i;
Anda dapat menggunakan berbagai perintah gdb untuk men-debug program C seperti yang dijelaskan di bagian di bawah ini.
Langkah 5. Mencetak nilai variabel di dalam gdb debugger
Syntax: print {variable} Examples: print i print j print num
(gdb) p i $1 = 1 (gdb) p j $2 = 3042592 (gdb) p num $3 = 3 (gdb)
Seperti yang Anda lihat di atas, dalam faktorial.c, kami belum menginisialisasi variabel j. Jadi, itu mendapat nilai sampah yang menghasilkan angka besar sebagai nilai faktorial.
Perbaiki masalah ini dengan menginisialisasi variabel j dengan 1, kompilasi program C dan jalankan lagi.
Bahkan setelah perbaikan ini tampaknya ada beberapa masalah dalam program factorial.c, karena masih memberikan nilai faktorial yang salah.
Jadi, tempatkan break point di baris ke-10, dan lanjutkan seperti yang dijelaskan di bagian berikutnya.
Langkah 6. Lanjutkan, melangkahi dan masuk – perintah gdb
Ada tiga jenis operasi gdb yang dapat Anda pilih saat program berhenti pada titik istirahat. Mereka melanjutkan sampai break point berikutnya, melangkah masuk, atau melangkahi baris program berikutnya.
- c atau lanjutkan:Debugger akan terus dijalankan hingga break point berikutnya.
- n atau berikutnya:Debugger akan mengeksekusi baris berikutnya sebagai instruksi tunggal.
- s atau langkah:Sama seperti berikutnya, tetapi tidak memperlakukan fungsi sebagai instruksi tunggal, melainkan masuk ke fungsi dan mengeksekusinya baris demi baris.
Dengan melanjutkan atau melangkah melalui Anda dapat menemukan bahwa masalahnya adalah karena kami belum menggunakan <=dalam pemeriksaan kondisi 'untuk loop'. Jadi mengubahnya dari
Gunakan pintasan berikut untuk sebagian besar operasi gdb yang sering dilakukan.pintasan perintah gdb
Perintah gdb lain-lain