GNU/Linux >> Belajar Linux >  >> Linux

Breakpoints dan Watchpoints GDB menggunakan awatch rwatch Contoh

Dalam tutorial ini kita akan membahas beberapa fungsi GDB lanjutan termasuk breakpoint bersyarat, dan watchpoint.

Kami juga menggunakan program C sederhana sebagai contoh untuk menjelaskan konsep debugger GDB ini.

Breakpoint Bersyarat GDB

Breakpoint, mengerem setiap kali program Anda mencapai tempat tertentu. Anda juga dapat menentukan kondisi untuk titik henti sementara. Kondisi adalah ekspresi boolean. Breakpoint bersyarat akan rusak, hanya jika ekspresi boolean bernilai TRUE.

Asumsikan Anda memanggil fungsi untuk loop, dan setiap 500 kali, program mogok. Breakpoint bersyarat datang untuk menyelamatkan dalam situasi tersebut, di mana Anda dapat mengatur kondisi dan menghentikan eksekusi hanya jika kondisinya cocok.

#include <stdio.h>
int main() {
        int i=0;
        for (i=0;i<1000;i++) {
                printf("%d\n",i);
        }
}
(gdb) b 8 if i=500
Breakpoint 2 at 0x400524: file a.c, line 8.
(gdb) run
Starting program: /home/lakshmanan/./a.out 

Breakpoint 1, main () at a.c:6
6		int i=0;
(gdb) c
Continuing.

Breakpoint 2, main () at a.c:8
8			printf("%d\n",i);
(gdb) p i
$1 = 500

Pada sesi gdb di atas, program berhenti ketika nilai i adalah 500.

Apa itu Watchpoint?

Watchpoint mirip dengan breakpoint yang telah kita bahas di artikel GDB – Breakpoints kami sebelumnya. Namun tidak seperti breakpoint yang disetel untuk fungsi atau baris kode, watchpoint disetel pada variabel. Ketika variabel tersebut dibaca/ditulis, watchpoint akan dipicu dan eksekusi program akan berhenti.

Harap dicatat bahwa variabel yang ingin Anda tonton harus dalam cakupan saat ini. Jadi, pastikan Anda menyetel breakpoint dalam cakupan variabel untuk menontonnya.

#include <stdio.h>

int main() {
        int a=10;
        int b=15;
        b = a+b;
        printf("%d\n",b);
}
$ cc -g watch.c -o watch

Mengatur Watchpoint Baca/Tulis menggunakan 'awatch'

Gunakan perintah awatch untuk mengatur watchpoint baca/tulis pada variabel. Sintaks untuk awatch adalah, 'awatch' diikuti dengan nama variabel.

$ gdb ./watch

(gdb) break 1
Breakpoint 1 at 0x400514: file a.c, line 1.
(gdb) run
Starting program: /home/lakshmanan/Personal/./a.out 

Breakpoint 1, main () at a.c:4
4		int a=10;
(gdb) awatch b
Hardware access (read/write) watchpoint 2: b
(gdb) n
5		int b=15;
(gdb) n
Hardware access (read/write) watchpoint 2: b

Old value = 0
New value = 15
main () at a.c:7
7		b = a+b;
(gdb) n
Hardware access (read/write) watchpoint 2: b

Old value = 15
New value = 25
main () at a.c:9
9		printf("%d\n",b);

Dalam contoh di atas, setiap kali variabel yang diberikan dibaca/ditulis, gdb mencetak nilai lama dan baru dan menghentikan eksekusi program.

Menyetel titik pengawasan baca untuk variabel menggunakan 'rwatch'

rwatch adalah perintah yang digunakan untuk mengatur read watchpoint di gdb. Setelah diatur, setiap kali variabel yang diberikan dibaca, program akan menghentikan eksekusi. Sintaksnya mirip dengan 'awatch'.

(gdb) rwatch b
Hardware read watchpoint 2: b
(gdb) c
Continuing.
Hardware read watchpoint 2: b

Value = 25
0x000000000040052b in main () at a.c:9
9		printf("%d\n",b);

Demikian pula, Anda dapat menggunakan 'watch' untuk menyetel watchpoint tulis di gdb.

Menghapus titik pengawasan

Watchpoints akan ditampilkan dalam daftar breakpoints.

Jadi, Anda dapat menggunakan info breakpoints untuk membuat daftar watchpoints dan Anda dapat menghapus/menonaktifkan yang mirip dengan breakpoints seperti yang ditunjukkan di bawah ini.


(gdb) info breakpoints 
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400514 in main at a.c:1
	breakpoint already hit 1 time
2       hw watchpoint  keep y                      b
	breakpoint already hit 1 time
(gdb) delete 2


Linux
  1. 10 Contoh Praktis Menggunakan Perintah scp

  2. Contoh Bash For Loop dan While Loop

  3. Apa itu Alamat IP? Contoh Alamat IPv4 dan IPv6

  1. Panduan Bash For Loop dan Contohnya

  2. Perintah Linux Cat:Penggunaan dan Contohnya

  3. Cara Menggabungkan Ping dan Traceroute Di Linux Menggunakan Contoh Perintah MTR

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

  2. Perintah Linux - Gambaran Umum dan Contoh

  3. 6 Contoh rsync untuk Mengecualikan Banyak File dan Direktori menggunakan pengecualian-dari