GNU/Linux >> Belajar Linux >  >> Linux

Contoh Breakpoint GDB untuk C – Setel, Lihat, Lanjutkan, dan Hapus Breakpoints

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.


Linux
  1. Memetakan Ulang Tombol Daya Untuk Menghapus?

  2. Cara Melihat dan Menghapus Aturan Iptables – Daftar dan Flush

  3. Breakpoints dan Watchpoints GDB menggunakan awatch rwatch Contoh

  1. 5 tips untuk GNU Debugger

  2. Cara menyiapkan header dan pustaka untuk pengembangan Linux

  3. Bagaimana cara mengatur nick default untuk koneksi irssi baru?

  1. Tetapkan Tanggal dan Waktu untuk Setiap Perintah yang Anda Jalankan di Bash History

  2. Tips dan trik untuk curl dan wget

  3. Cara mengatur OpenCL untuk GPU di Linux dan Docker [Panduan Lengkap]