perintah break

Membuat breakpoint pada baris, alamat atau fungsi yang ditentukan.

Sintaks

break
b
break [Nama Fungsi]
break [Nama Berkas]:[Nomor Baris]
break [Nomor Baris]
break *[Alamat]
break [...] if [Kondisi]
break [...] thread [Thread-id]
b [...]

Parameter

Nama Fungsi
Jika ditentukan, perintah break akan menetapkan breakpoint di awal fungsi yang ditentukan.
Nama Berkas
Jika ditentukan bersama dengan nomor baris, perintah break akan menetapkan breakpoint pada baris yang diberikan di dalam berkas. Jika baris yang ditentukan tidak mengandung kode yang dapat dieksekusi, breakpoint akan ditetapkan pada baris pertama di bawahnya yang memiliki kode yang dapat dieksekusi.
Nomor Baris
Jika ditentukan, perintah break akan menetapkan breakpoint pada lokasi yang diberikan di dalam berkas yang ditentukan. Jika tidak ada berkas yang ditentukan, berkas sumber saat ini akan digunakan.
Alamat
Jika ditentukan, perintah break akan menetapkan breakpoint pada alamat yang diberikan. Alamat tersebut harus berupa ekspresi C/C++ yang valid (misalnya angka heksadesimal yang dimulai dengan 0x).
Kondisi
Menentukan ekspresi C/C++ opsional yang akan dievaluasi setiap kali breakpoint terkena. Jika hasil evaluasi adalah 0, breakpoint akan dilewati.
Thread-Id
Menentukan ID thread tingkat GDB opsional yang akan dikaitkan dengan breakpoint ini. Jika diberikan, breakpoint hanya akan dipicu dalam thread yang diberikan. Jika tidak diberikan, breakpoint akan dipicu ketika thread mana pun mencapai lokasi yang ditentukan.

Perhatian

Jangan bingung antara bentuk [Nama Fungsi] dan [Alamat] dari perintah break. Misalnya, jika Anda mencoba menetapkan breakpoint pada alamat 0x40138c, perintah berikut akan gagal:

(gdb)break 0x40138c     
                

Ini terjadi karena GDB akan menginterpretasikan 0x40138c sebagai nama fungsi daripada alamat. Sintaks yang benar untuk menetapkan breakpoint pada alamat 0x40138c adalah:

(gdb)break *0x40138c     
                

Breakpoint Tertunda

Jika Anda mencoba menetapkan breakpoint dalam kode di dalam pustaka bersama (DLL) yang belum dimuat, GDB akan menampilkan peringatan berikut:

Make breakpoint pending on future shared library load? (y or [n])     
                

Dalam kebanyakan kasus menjawab 'y' akan membuat breakpoint tertunda yang akan diselesaikan ketika pustaka bersama (DLL) yang bersangkutan dimuat di masa mendatang. Namun, ini mungkin tidak berhasil dalam salah satu kasus berikut:

  • Pustaka bersama tidak mengandung simbol debugging (misalnya simbol telah dihapus dengan perintah 'strip').
  • GDB tidak dapat mendeteksi saat pustaka dimuat (misalnya saat menggunakan gdb 6.x di Android)
  • Anda telah membuat kesalahan dalam nama berkas atau nama fungsi. Perhatikan bahwa nama berkas di Linux bersifat case-sensitive.

Jika Anda mengalami masalah breakpoint, perintah berikut mungkin berguna untuk diagnosa lebih lanjut:

  • info sharedlibrary memberikan informasi tentang pustaka bersama (DLL) yang saat ini dimuat.
  • info sources memberikan informasi tentang berkas sumber yang dikenali oleh GDB.
  • info breakpoints memberikan informasi terperinci tentang breakpoint yang dibuat dan statusnya.

Contoh

Menentukan lokasi

Dalam contoh ini kita akan menetapkan breakpoint di awal fungsi main() menggunakan 4 variasi sintaks yang berbeda:

Menggunakan nama fungsi:

(gdb) b main     
Breakpoint 1 at 0x401395: file 0.cpp, line 4.     
(gdb)     
                

Menggunakan alamat fungsi:

(gdb) info address main     
Symbol "main(int, char**)" is a function at address 0x40138c.     
(gdb) break *0x40138c     
Breakpoint 2 at 0x40138c: file 0.cpp, line 4.     
(gdb)     
                

Menggunakan nama berkas dan nomor baris:

(gdb) info line main     
Line 4 of "0.cpp" starts at address 0x40138c      
   and ends at 0x401395 .     
(gdb) break 0.cpp:4     
Breakpoint 3 at 0x401395: file 0.cpp, line 4.     
                

Menggunakan nomor baris saja:

(gdb) info source     
Current source file is 0.cpp     
Compilation directory is C:\MinGW\bin     
Located in c:\mingw\bin\0.cpp     
Source language is c++.     
Compiled with DWARF 2 debugging format.     
Does not include preprocessor macro info.     
(gdb) break 4     
Breakpoint 4 at 0x40138c: file 0.cpp, line 4.     
                
Breakpoint Kondisional

Dalam contoh ini kita akan menetapkan breakpoint kondisional dalam program berikut:

#include <stdio.h>

void func(int arg)
{
    printf("Iterasi %d\n", arg);
}

int main(int argc, char *argv[])
{
    for(int i = 0; i < 5; i++)
        func(i);
    return 0;
}     
                

Breakpoint akan ditetapkan di dalam fungsi func() dan hanya akan dipicu ketika arg sama dengan 3:

(gdb) break func if arg == 3     
Breakpoint 1 at 0x4013b6: file 0.cpp, line 5.     
(gdb) run     
Starting program: C:\MinGW\bin\0.exe     
[New Thread 7860.0x25c0]     
Iterasi 0     
Iterasi 1     
Iterasi 2

Breakpoint 1, func (arg=3) at 0.cpp:5     
5               printf("Iterasi %d\n", arg);