Gdb adalah alat penting untuk men-debug program C.
Breakpoints adalah cara untuk memberitahu GDB untuk menghentikan atau menghentikan sementara eksekusi program pada baris, atau fungsi, atau alamat tertentu. Setelah program dihentikan, Anda dapat memeriksa dan mengubah nilai variabel, melanjutkan eksekusi program dari breakpoint tersebut, dll.
Jika Anda baru mengenal GDB, Anda harus terlebih dahulu memahami dasar-dasar cara men-debug C program menggunakan GDB.
Tutorial ini akan menggunakan kode berikut untuk menjelaskan breakpoint gdb dengan contoh.
#include <stdio.h> int power(int,int); int main() { int i; printf("Program to calculate power\n"); for (i=0;i<10;i++) printf("%d %d\n",i, power(2,i)); return 0; } int power (int base, int n) { int i,p; p=1; for (i=1; i<=n; i++) p = p*base; return p; } # cc -g power.c
Sekarang Anda memiliki executable yang menghitung kekuatan basis 2 dari 0-9.
1. Cara menyetel breakpoint pada fungsi
# gdb (gdb) file ./a.out Reading symbols from /home/lakshmanan/a.out...done. (gdb) b power Breakpoint 1 at 0x40055d: file power.c, line 16. (gdb) run Starting program: /home/lakshmanan/./a.out Program to calculate power Breakpoint 1, power (base=2, n=0) at power.c:17 17 p=1;
Kami mengatur breakpoint pada fungsi power dan kami menjalankan program. Program akan melanjutkan eksekusi sampai fungsi memanggil power(). Setelah fungsi ditemukan, program akan berhenti.
2. Dapatkan informasi tentang argumen yang diteruskan ke suatu fungsi
Untuk mengetahui argumen yang diteruskan ke fungsi, gunakan 'info args'.
(gdb) info args base = 2 n = 0
3. Dapatkan informasi tentang variabel lokal
Untuk mengetahui informasi tentang variabel lokal yang dapat diakses dalam fungsi ini (frame tumpukan saat ini) gunakan 'info lokal'.
(gdb) info locals i = 32767 p = -7840
4. Lanjutkan eksekusi program hingga breakpoint berikutnya
Untuk melanjutkan program hingga breakpoint berikutnya terjadi, gunakan 'lanjutkan'.
(gdb) continue Continuing. 0 1 Breakpoint 1, power (base=2, n=1) at power.c:16 16 int i=0,p=1;
Setelah kami memberikan 'lanjutkan', fungsi daya dijalankan dan mencetak hasilnya. Fungsi daya yang sama dipanggil lagi dari 'main()' untuk loop, sehingga program dihentikan sekali lagi.
5. Dapatkan informasi tentang semua breakpoint
Anda dapat mengetahui informasi mengenai breakpoint menggunakan 'info breakpoints'.
(gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004005a7 in power at power.c:16 breakpoint already hit 2 times
Sekarang kita hanya menetapkan satu breakpoint dan informasi mengenai breakpoint akan ditampilkan.
6. Hapus breakpoint yang ada
Untuk menghapus breakpoint yang ada, gunakan 'delete breakpoints'
(gdb) delete breakpoints 1 (gdb) info breakpoints No breakpoints or watchpoints.
Sekarang kami telah menghapus breakpoint yang ada di fungsi daya.
7. Setel breakpoint sementara
Terkadang Anda mungkin ingin menghentikan program hanya satu kali. Anda dapat menggunakan breakpoint sementara untuk itu. Breakpoint sementara menghentikan program hanya sekali, dan kemudian akan dihapus.
(gdb) tbreak power Temporary breakpoint 3 at 0x4005a7: file power.c, line 16. (gdb) info breakpoints Num Type Disp Enb Address What 3 breakpoint del y 0x00000000004005a7 in power at power.c:16 (gdb) continue Continuing. 1 2 Temporary breakpoint 3, power (base=2, n=2) at power.c:16 16 int i=0,p=1; (gdb) info breakpoints No breakpoints or watchpoints.