Dříve jsme diskutovali o základech, jak napsat a zkompilovat program C pomocí programu C Hello World.
V tomto článku probereme, jak ladit program c pomocí ladicího programu gdb v 6 jednoduchých krocích.
Napište ukázkový program C s chybami pro účely ladění
Abychom se naučili ladění programu C, vytvořte si následující program v C, který vypočítá a vypíše faktoriál čísla. Tento program C však obsahuje některé chyby pro naše účely ladění.
$ vim factorial.c # include <stdio.h> int main() { int i, num, j; printf ("Enter the number: "); scanf ("%d", &num ); for (i=1; i<num; i++) j=j*i; printf("The factorial of %d is %d\n",num,j); }
$ cc factorial.c $ ./a.out Enter the number: 3 The factorial of 3 is 12548672
Pojďme jej odladit a zároveň si prohlédnout nejužitečnější příkazy v gdb.
Krok 1. Zkompilujte program C s volbou ladění -g
Zkompilujte svůj program v C s volbou -g. To umožňuje kompilátoru shromažďovat informace o ladění.
$ cc -g factorial.c
Poznámka:Výše uvedený příkaz vytvoří soubor .out, který bude použit pro ladění, jak je uvedeno níže.
Krok 2. Spusťte gdb
Spusťte ladicí program C (gdb), jak je znázorněno níže.
$ gdb a.out
Krok 3. Nastavte bod přerušení v programu C
Syntax: break line_number
Jiné formáty:
- konec [název_souboru]:číslo_řádku
- break [file_name]:func_name
Umístí bod přerušení do programu C, kde máte podezření na chyby. Při provádění programu se ladicí program zastaví v bodě přerušení a zobrazí výzvu k ladění.
Před spuštěním programu tedy umístěte do našeho programu následující bod přerušení.
break 10 Breakpoint 1 at 0x804846f: file factorial.c, line 10.
Krok 4. Spusťte program C v debuggeru gdb
run [args]
Program můžete spustit pomocí příkazu run v debuggeru gdb. Můžete také zadat argumenty příkazového řádku programu pomocí příkazů run args. Vzorový program, který jsme zde použili, nevyžaduje žádné argumenty příkazového řádku, takže spusťte a spusťte program.
run Starting program: /home/sathiyamoorthy/Debugging/c/a.out
Jakmile spustíte program C, spustí se až do prvního bodu přerušení a zobrazí výzvu k ladění.
Breakpoint 1, main () at factorial.c:10 10 j=j*i;
K ladění programu C můžete použít různé příkazy gdb, jak je vysvětleno v sekcích níže.
Krok 5. Tisk hodnot proměnných v debuggeru gdb
Syntax: print {variable} Examples: print i print j print num
(gdb) p i $1 = 1 (gdb) p j $2 = 3042592 (gdb) p num $3 = 3 (gdb)
Jak vidíte výše, v faktorial.c jsme neinicializovali proměnnou j. Získává tedy nesmyslnou hodnotu, která má za následek velká čísla jako faktoriální hodnoty.
Opravte tento problém inicializací proměnné j na 1, zkompilujte program C a spusťte jej znovu.
I po této opravě se zdá, že je v programu factorial.c nějaký problém, protože stále dává nesprávnou hodnotu faktoriálu.
Umístěte tedy bod přerušení na 10. řádek a pokračujte, jak je vysvětleno v další části.
Krok 6. Pokračujte, překračujte a zadávejte – příkazy gdb
Když se program zastaví v bodě přerušení, můžete si vybrat ze tří druhů operací gdb. Pokračují až do dalšího bodu přerušení, vstoupí nebo překročí další programové řádky.
- c nebo pokračovat:Debugger bude pokračovat v provádění až do dalšího bodu přerušení.
- n nebo next:Debugger provede další řádek jako jednu instrukci.
- s nebo krok:Stejné jako další, ale nepovažuje funkci za jedinou instrukci, místo toho přejde do funkce a provede ji řádek po řádku.
Pokračováním nebo procházením byste mohli zjistit, že problém je způsoben tím, že jsme nepoužili <=v kontrole stavu „smyčka for“. Takže změna z
Pro většinu častých operací gdb použijte následující zkratky.zkratky příkazů gdb
Různé příkazy gdb