Gdb je nezbytný nástroj pro ladění programů C.
Body přerušení jsou způsob, jak říci GDB, aby zastavilo nebo pozastavilo provádění programu na určitém řádku, funkci nebo adrese. Jakmile je program zastaven, můžete prozkoumat a změnit hodnoty proměnných, pokračovat v provádění programu od tohoto bodu přerušení atd.
Pokud jste v GDB noví, měli byste nejprve pochopit základy ladění C program využívající GDB.
Tento tutoriál použije následující kód k popisu bodu přerušení gdb s příklady.
#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
Nyní máte spustitelný soubor, který vypočítává mocninu základu 2 od 0 do 9.
1. Jak nastavit bod přerušení ve funkci
# 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;
Nastavíme bod přerušení při výkonu funkce a spustíme program. Program bude pokračovat ve vykonávání, dokud funkce nezavolá power(). Jakmile je funkce nalezena, program se zastaví.
2. Získejte informace o argumentech předávaných funkci
Chcete-li znát argumenty předané funkci, použijte ‘informační argumenty’.
(gdb) info args base = 2 n = 0
3. Získejte informace o místních proměnných
Chcete-li zjistit informace o lokálních proměnných dostupných v rámci této funkce (aktuální zásobníkový rámec), použijte ‘info locals’.
(gdb) info locals i = 32767 p = -7840
4. Pokračujte v provádění programu až do dalšího bodu přerušení
Chcete-li pokračovat v programu, dokud nenastane další bod přerušení, použijte „pokračovat“.
(gdb) continue Continuing. 0 1 Breakpoint 1, power (base=2, n=1) at power.c:16 16 int i=0,p=1;
Jakmile dáme „pokračovat“, funkce napájení se provede a vytiskne výsledek. Stejná funkce napájení byla znovu volána ze smyčky ‚main()‘ for, takže se program znovu zastavil.
5. Získejte informace o všech bodech přerušení
Informace týkající se bodů přerušení můžete zjistit pomocí „informačních bodů přerušení“.
(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
Nyní jsme nastavili pouze jeden bod přerušení a zobrazí se informace o bodech přerušení.
6. Odstranit existující bod přerušení
Chcete-li odstranit existující bod přerušení, použijte příkaz „delete breakpoints“
(gdb) delete breakpoints 1 (gdb) info breakpoints No breakpoints or watchpoints.
Nyní jsme odstranili bod přerušení, který byl přítomen ve funkci napájení.
7. Nastavte dočasný bod přerušení
Někdy můžete chtít zastavit program v určitém bodě pouze jednou. K tomu můžete použít dočasné body přerušení. Dočasný bod přerušení zastaví program pouze jednou a poté bude odstraněn.
(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.