GNU/Linux >> Belajar Linux >  >> Linux

Cara Debug Program C menggunakan gdb dalam 6 Langkah Sederhana

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

pintasan perintah gdb

Gunakan pintasan berikut untuk sebagian besar operasi gdb yang sering dilakukan.

  • l – daftar
  • p – cetak
  • c – lanjutkan
  • s – langkah
  • ENTER:menekan tombol enter akan menjalankan kembali perintah yang dieksekusi sebelumnya.

Perintah gdb lain-lain

  • perintah saya: Gunakan perintah gdb l atau daftar untuk mencetak kode sumber dalam mode debug. Gunakan nomor baris l untuk melihat nomor baris tertentu (atau) fungsi l untuk melihat fungsi tertentu.
  • bt:mundur – Mencetak backtrace dari semua bingkai tumpukan, atau COUNT bingkai terdalam.
  • bantuan – Lihat bantuan untuk topik gdb tertentu — bantuan TOPICNAME.
  • berhenti – Keluar dari debugger gdb.

Linux
  1. Cara men-debug program C di Linux menggunakan gdb

  2. Bagaimana Cara Men-debug Skrip Bash?

  3. Tutorial Debugger Perl:10 Langkah Mudah untuk Debug Program Perl

  1. Debug Linux menggunakan ProcDump

  2. Cara Meningkatkan ke Ubuntu 22.04 LTS – Langkah Sederhana

  3. Cara mengaktifkan logging debug NFS menggunakan rpcdebug

  1. Cara Membuat File Proc Linux di Program C menggunakan LKM

  2. Bagaimana cara mendapatkan alamat MAC mesin Anda menggunakan program C?

  3. Bagaimana cara men-debug kernel Linux dengan GDB dan QEMU?