Debugging Program C dengan GDB di Linux

GDB(GNU Project Debugger) merupakan tool yang dipakai untuk mengecek lebih dalam kode-kode program yang kita buat.
Biasanya kita mengecek error program dengan cara mengira-ngira dan menebak-nebak. Cara seperti itu sangat memakan energi dan waktu, apa lagi kalau program yang terdiri dari beberapa ribu bahkan diatas puluhan ribu baris kode. Nah, disinilah GDB akan membantu kita mempermudah proses men-debug sebuah program.

Kita akan memakai tool ini untuk debugging program binary search di bawah ini.
#include <stdio.h>

void binary_search(int data[], int length, int key)
{
    int start = 0;
    int end = length - 1;
    
    while (end >= start)
    {
        int current = (end + start) / 2;
        if (data[current] == key)
        {
            printf("%d ditemukan pada indeks ke-%d\n", key, current);
            return;
        }
        else if (data[current] > key)
        {
            end = current - 1;
        }
        else
        {
            start = current + 1;
        }
    }
    
    printf("Angka tidak ditemukan!\n");
    return;
}
 
int main()
{
    int num;
    printf("Masukkan banyaknya data: ");
    scanf("%d", &num);
    
    int data[num];
    for (int i = 0; i < num; i++)
    {
        printf("Angka ke-%d: ", i);
        scanf("%d", &data[i]);
    }
    
    int key;
    printf("Ketik angka yang ingin dicari: ");
    scanf("%d", &key);
    
    binary_search(data, num, key);
    
    return 0;
}
Simpan kode program tersebut dengan nama binary_search.c lalu di-compile dengan command make. Sebelum di-compile, edit dahulu pada file make yang telah dibuat terdahulu dengan menambahkan flag -ggdb3 sehingga makefile nya menjadi seperti ini.(Baca: Pemrograman C di Linux)
CC=clang

CFLAGS= -ggdb3 -std=c99 -Wall -Werror
Kemudian compile program tersebut dengan command make binary_search.

Kita mulai proses debugging program.
1. Pada terminal, ketik.
gdb ./binary_search
Sehingga akan muncul tampilan seperti ini.

2. Ketik break main agar gdb memulai mengecek program dari main()
Bisa dilihat pada tulisan line 33, karena main() dimulai pada baris ke-33, berarti gdb akan start pada baris ke-33.

3. Ketik run untuk menjalankan program, bisa juga dengan hanya mengetik r.
 GDB akan menampilkan kode program tersebut baris per baris, pada gambar terlihat kode program pada baris ke-33.

4. Ketik next untuk lanjut ke baris selanjutnya, bisa juga dengan hanya mengetik n.
GDB sampai pada baris ke-34 dimana terdapat scanf yang berfungsi menerima input dari user, sehingga muncul tampilan seperti di atas. Masukkan saja data sebanyak 5 data.

5. Karena kita sudah memasukkan nilai 5 pada variabel num, kita bisa mengecek nilai pada variabel tersebut dengan command.
print nama_variabel
Karena variabel tersebut bernama num, maka kita mengetik command print num sehingga akan muncul tampilan seperti ini.

6. Ketik next atau n sampai menyentuh baris yang terdapat fungsi binary_search(), ketik n untuk lanjut ke baris berikutnya, atau ketik step atau s untuk "memasukki" fungsi tersebut dan melihat kode-kode di dalamnya.
Bisa dilihat, gdb langsung "lompat" ke baris ke-5 dimana fungsi binary_search() dimulai, dan juga ditampilkan nilai-nilai yang dimasukkan ke dalam parameter-parameter pada fungsi tersebut. Parameter data berupa array sehingga yang tampil adalah alamat memory dari variabel array data tersebut, sedangkan parameter length bernilai 5 karena kita memasukkan variabel num di dalamnya, dan juga parameter key benilai 7 karena kita memasukkan variabel key di dalamnya.

7. Kita juga bisa melihat nilai-nilai variabel pada scope tertentu dengan command info locals. Misalnya ketika kita berada pada scope fungsi binary_search(), ketika kita mengetik info locals maka akan diperlihatkan nilai-nilai variabel yang ada pada scope fungsi tersebut. (Baca: Konsep Scope dalam Pemrograman C)
Nilai-nilai yang tampil adalah nilai variabel pada scope lokal di binary_search(), tetapi bukan pada scope while yang terdapat di dalamnya.


Nah, dari percobaan diatas kita sudah mengetahui fungsi-fungsi command ini.
run             Menjalankan program
next            Ke baris kode selanjutnya
print           Menampilkan nilai pada sebuah variabel
step            Melangkah masuk ke dalam sebuah fungsi/sub-program
info locals     Menampilkan nilai-nilai variabel pada scope tertentu

Sekian, semoga bermanfaat.

Post a Comment