Jak používat GNU Debugger v Linuxu

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é.