GNU Debugger (GDB) je open-source debugger pro systémy GNU. Ladicí program je přenosný a lze jej použít pro více jazyků jako C/C++ a Fortran. Lze jej použít pro ladění programů sledováním jejich stavů na konkrétních bodech přerušení a dokonce změnou toku nebo hodnot pro další provádění. GDB obvykle běží v příkazovém řádku, ale také pro něj bylo vyvinuto několik GUI.
V tomto článku prozkoumáme, jak ladit programy C pomocí GDB v Ubuntu 20.04 LTS (Focal Fossa).
Předpoklady
- Systém Ubuntu 20.04
- Uživatel s právy sudo pro přejmenování více souborů.
Poznámka: Příkazy popsané v tomto článku byly testovány na Ubuntu 20.04 LTS (Focal Fossa).
Instalace balíčků
Nainstalujte nezbytné balíčky GN pro kompilaci a ladění. Spusťte v terminálu následující příkaz:
$ sudo apt install gcc gdb -y
Příklad programu C pro ladění
Kód
Před spuštěním je potřeba program zkompilovat. Chystáme se zkompilovat následující kód C v souboru main.c .
#include <stdio.h> int main() { for (int i=0; i<5; ++i) { printf("Iterator: %d\n", i); } return 0; }
Zkompilujte program C pomocí GCC
Obvykle se kód C kompiluje v GCC pomocí následujícího příkazu:
$ gcc main.c -o bin
Je třeba uvést další argument, který zahrnuje symboly v binárním. Tyto symboly jsou používány GDB ke sledování a ladění programu. Spuštěním následujícího příkazu v terminálu zkompilujte kód C:
$ gcc -g main.c -o bin
Spustitelný soubor s názvem bin se objeví.
Spusťte testovací program
Binární soubor s názvem bin lze spustit jako jakýkoli jiný spustitelný soubor na rozhraní příkazového řádku. Ke spuštění v terminálu použijte následující příkaz:
$ ./bin
Zobrazí se výstup kódu.
Ladění aplikace v systému Linux
Spustit ladicí program
Spusťte nástroj GDB pomocí následujícího příkazu v terminálu:
$ gdb bin
Stiskněte enter. Zobrazí se konzola pro terminál GDB. Zadejte běh příkaz v této konzole ke spuštění spustitelného souboru poskytnutého obslužnému programu jako argument.
(gdb) run
Ladění bodů přerušení
Přidat body přerušení
Body přerušení lze přidat několika způsoby. Do printf přidáme bod přerušení funkce v našem kódu. Chcete-li přidat bod přerušení, spusťte v terminálu následující příkaz:
(gdb) break printf
Alternativně lze k přidání bodu přerušení použít také číslo řádku.
(gdb) break 6
Zadejte běh a program se zastaví v bodě přerušení.
Krok přes body přerušení
Použijte příkaz pokračovat pokračovat ve vykonávání programu.
(gdb) continue
Existují dva další příkazy pro různé účely pokračování provádění programu:
- Krok:kroky přes další strojovou instrukci.
- Další:kroky k přechodu na další řádek kódu.
Lze použít i zkratky příkazů. Stejně jako zkratka pokračovat příkaz je c.
(gdb) c
Informace o bodech přerušení
Informace o bodech přerušení lze sledovat pomocí info příkaz gdb . Spusťte následující příkaz terminálu:
(gdb) info breakpoints
Zobrazí se informace o bodech přerušení.
Poznámka:Číslo vlevo od bodu přerušení se používá k odkazování na něj jinými příkazy.
Smazat zarážky
Bod přerušení lze smazat pomocí delete a odkazem na číslo bodu přerušení pozorované ve výstupu info utility.
(gdb) delete 1
Nyní byl bod přerušení odstraněn a pokud je spuštěn, program se spustí přímo do konce.
Sledování proměnných
Proměnné lze sledovat pomocí nástroje watch. Nejprve musíme zadat rozsah, ve kterém proměnná existuje. Za tímto účelem nejprve přidejte bod přerušení pomocí následujícího příkazu:
(gdb) break 6
Potom spusťte kód, který dosáhne tohoto bodu přerušení.
(gdb) r
Nyní jsme ve smyčce, kde je proměnná i existuje.
hodinky příkaz bude použit k pozorování předchozí a nové hodnoty proměnné i ve smyčce.
(gdb) watch i
Nyní bod přerušení generovaný sledováním příkaz se objeví také v seznamu bodů přerušení. Seznam bodů přerušení lze zobrazit pomocí následujícího příkazu:
(gdb) info breakpoints
Navíc nepotřebujeme bod přerušení vkládat dříve. Lze jej snadno odstranit pomocí následujícího příkazu:
(gdb) delete 1
Pokud nyní budete pokračovat, kód zobrazí hodnoty vždy, když proměnná změní hodnotu, a zobrazí staré i nové hodnoty.
(gdb) c
Pomocí stejného příkazu lze také sledovat další iterace programu.
Ukončit ladicí program
Spuštěním následujícího příkazu v terminálu ukončete ladicí program.
(gdb) quit
Tímto zavřete gdb zobrazí se výchozí příkazový řádek.
Závěr
V tomto článku jsme prozkoumali, jak spustit a přerušit program v GDB. Navíc byl také nakonfigurován tak, aby se sám zlomil, když se změní hodnota proměnné. Doufáme, že po dodržení tohoto článku můžete snadno ladit své programy v GDB.