GNU/Linux >> Znalost Linux >  >> Linux

Příklad bodu přerušení GDB pro C – nastavení, zobrazení, pokračování a odstranění bodů přerušení

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.


Linux
  1. Tipy a triky pro curl a wget

  2. Tip pro profesionály:Smyčky For, While a Until

  3. Přemapování vypínače k ​​odstranění?

  1. Nastavte datum a čas pro každý příkaz, který provedete v historii Bash

  2. Jak nastavit OpenCL pro GPU na Linuxu a Dockeru [Kompletní průvodce]

  3. Jak nastavím výchozí přezdívku pro nová připojení irssi?

  1. Přepsat nadpis okna pro libovolné okno v Kde a nastavit vlastní nadpis okna?

  2. Jak zobrazit a odstranit pravidla iptables – seznam a vyprázdnění

  3. GDB Breakpoints a Watchpoints pomocí awatch rwatch Příklady