GNU Debugger se používá k ladění programu, analýze zhroucení nebo ke sledování toho, co program dělá v určitém bodě. Byl vyvinut projektem GNU v 80. letech 20. století a byl jedním z nejrozšířenějších ladicích programů příkazového řádku a také jedním z nejpopulárnějších programů GNU.
Nejprve si napíšeme malý program v C, který pak odladíme. Chcete-li začít, vytvořte nový .C
pomocí souboru vim
nebo libovolný editor dle vašeho výběru:
vim test.c
Vytvořte následující program C:
#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2,2; printf("Hodnoty i a f jsou: %d a %f\n", i, f); návrat 0; }
lis Uniknout
přejděte do příkazového režimu vim. Potom zadejte :wq
pro uložení programu a ukončení.
Zkompilujte a zjistěte, zda program běží:
gcc test.c -o test ./test Hodnoty i a f jsou: 8 a 7,700000
Chcete-li povolit podporu ladění v programu, zkompilujeme to s -G
vlajka. Pokud není příznak použit, uživatel může stále ladit program, i když s omezenými možnostmi.
gcc test.c -g -o test
Chcete-li zahájit ladění náš spustitelný soubor test
v gdb
, běžíme:
test gdb
Otevře se gdb
konzole, kde můžete zadat gdb
příkazy. Chcete-li zobrazit seznam příkazů, použijte Pomoc
příkaz.
$(gdb) help Seznam tříd příkazů: aliasy -- Aliasy jiných příkazů zarážky -- Zastavení programu v určitých bodech dat -- Zkoumání datových souborů -- Specifikace a zkoumání vnitřních souborů -- Příkazy údržby jsou nejasné -- Spuštěné nejasné funkce -- Spuštění programového zásobníku -- Zkoumání stavu zásobníku -- Podpora dotazů na stav -- Sledovací body zařízení podpory -- Sledování provádění programu bez zastavení programu uživatelsky definované -- Uživatelem definované příkazy Napište „help“ následované názvem třídy pro seznam příkazů v této třídě. Zadejte "help all" pro seznam všech příkazů. Pro úplnou dokumentaci zadejte „help“ následovaný názvem příkazu. Zadejte „apropos word“ pro vyhledání příkazů souvisejících s „word“. Zkratky názvu příkazu jsou povoleny, pokud jsou jednoznačné.
Poté můžete psát help class_name
zobrazit příkazy patřící do této třídy. Chcete-li vyhledávat příkazy pomocí podřetězce, použijte apropos podřetězec
.
Chcete-li nastavit bod přerušení, když program zadá funkci, běh:
$(gdb) přeruší hlavní
Zde nastavíme bod přerušení u jediné funkce v našem kódu, tzn. hlavní
. Použijte příkaz běh
spustit program do dalšího bodu přerušení nebo do ukončení.
$(gdb) spustit
Chcete-li nastavit bod přerušení na konkrétním místě ve funkci, použití:
přestávka *hlavní + 4
Tím se nastaví bod přerušení na 4. řádku funkce main.
Nyní, přejít přes tok programu na další řádek kódu, jednoduše spustit krok
příkaz.
$(gdb) krok 5: float f = 5,5;
Chcete-li zobrazit obsah proměnné, běh Zobrazit
.
$(gdb) zobrazení i 6: i = 5
Chcete-li upravit obsah proměnné, který může být vyžadován k analýze běhu programu pod konkrétními hodnotami proměnné, run nastavit proměnnou =Výraz
.
$(gdb) nastavená proměnná i=10 $(gdb) zobrazení i 7: i = 10
Zde může být výrazem jakýkoli platný (aritmetický / logický) výraz. Pro jednoduchost přiřadíme proměnné jinou hodnotu (10). i
.
Chcete-li vytisknout kód sestavení pro program, použít příkaz rozebrat název funkce
:
Používejte jen rozebrat
pro tisk kódu sestavy pro celý program. Všimněte si šipky na konkrétním řádku v kódu sestavy. Označuje, že relace ladění je aktuálně pozastavena na tomto konkrétním paměťovém místě (tj. na daném řádku kódu).
Chcete-li ladicí program přeskočit na konkrétní řádek kódu, běh:
$(gdb) skok *hlavní + 2 Pokračování na 0x400528. Breakpoint 2, 0x000000000040052a v main () na test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i =
To způsobí, že ladicí program skočí na paměťové místo 2. řádku kódu ve funkci hlavní
. Všimněte si, že zde jsem skočil ze začátku hlavního na přímo druhé místo. Tedy variabilní i
nebyl nikdy nastaven, což má za následek chybu ladicího programu, že nemůže přistupovat k obsahu paměti na adrese proměnné i
.
Toto jsou některé ze základních příkazů, které vám mohou pomoci začít s laděním spustitelného souboru v Linuxu. Doufáme, že pro vás budou informace na této stránce užitečné.