Ako používať GNU Debugger v Linuxe

GNU Debugger sa používa na ladenie programu, analýzu zlyhania alebo na zistenie, čo program robí v určitom bode. Bol vyvinutý projektom GNU v 80-tych rokoch minulého storočia a bol jedným z najpoužívanejších ladiacich programov príkazového riadku, ako aj jedným z najpopulárnejších softvérov GNU.

Najprv napíšme malý program v C, ktorý potom odladíme. Ak chcete začať, vytvorte nový .c pomocou súboru vim alebo ľubovoľný editor podľa vášho výberu:

vim test.c

Vytvorte nasledujúci program C:

#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2,2; printf("Hodnoty i a f sú: %d a %f\n", i, f); návrat 0; }

Stlačte tlačidlo uniknúť prejdite do príkazového režimu vim. Potom zadajte :wq pre uloženie programu a ukončenie.

Kompilujte a zistite, či program beží:

gcc test.c -o test ./test Hodnoty i a f sú: 8 a 7,700000

Ak chcete povoliť podporu ladenia v programe, zostavíme ho s -g vlajka. Ak sa príznak nepoužije, používateľ môže stále ladiť program, aj keď s obmedzenými možnosťami.

gcc test.c -g -o test

Ak chcete spustiť ladenie náš spustiteľný súbor test v gdb, bežíme:

test gdb

Otvorí sa gdb konzola, kde môžete zadať gdb príkazy. Ak chcete zobraziť zoznam príkazov, použite Pomoc príkaz.

$(gdb) help Zoznam tried príkazov: aliasy -- aliasy iných príkazov body prerušenia -- zastavenie programu v určitých bodoch s údajmi -- Skúmanie dátových súborov -- Špecifikovanie a skúmanie interných súborov -- Príkazy údržby sú nejasné -- Nejasné funkcie sú spustené -- Spustenie zásobníka programu -- Skúmanie stavu zásobníka -- Podpora dotazov na stav -- Sledovacie body podporných zariadení -- Sledovanie vykonávania programu bez zastavenia programu definované používateľom -- Príkazy definované používateľom Napíšte „help“ nasledované názvom triedy pre zoznam príkazov v danej triede. Napíšte „help all“ pre zoznam všetkých príkazov. Úplnú dokumentáciu získate napísaním „help“ a za ním názvom príkazu. Ak chcete vyhľadať príkazy súvisiace so slovom, zadajte „apropos word“. Skratky názvov príkazov sú povolené, ak sú jednoznačné.

Potom môžete zadať pomoc názov_triedy aby ste videli príkazy patriace do tejto triedy. Ak chcete vyhľadávať príkazy pomocou podreťazca, použite apropos podreťazec.

Ak chcete nastaviť bod prerušenia, keď program zadá funkciu, spustiť:

$(gdb) preruší hlavné

Tu nastavíme bod prerušenia pri jedinej funkcii v našom kóde, t.j. hlavný. Použite príkaz bežať spustiť program do nasledujúceho bodu prerušenia alebo do ukončenia.

$(gdb) spustiť

Ak chcete nastaviť bod prerušenia na konkrétnom mieste vo funkcii, použiť:

prestávka *hlavná + 4

Tým sa nastaví bod prerušenia na 4. riadku funkcie main.

teraz prejsť cez tok programu na ďalší riadok kódu, jednoducho spustite krok príkaz.

$(gdb) krok 5: float f = 5,5;

Ak chcete zobraziť obsah premennej, bežať displej .

$(gdb) zobrazenie i 6: i = 5

Ak chcete upraviť obsah premennej, ktorý môže byť potrebný na analýzu behu programu pod špecifickými hodnotami premennej, run nastaviť premennú =Výraz.

$(gdb) nastavená premenná i=10 $(gdb) zobrazenie i 7: i = 10

Tu môže byť výrazom akýkoľvek platný (aritmetický / logický) výraz. Pre jednoduchosť len priradíme premennej inú hodnotu (10). i.

Ak chcete vytlačiť kód zostavy pre program, použite príkaz rozobrať názov funkcie:

Používajte len rozoberať vytlačiť montážny kód pre celý program. Všimnite si šípku na konkrétnom riadku v kóde zostavy. Označuje, že relácia ladenia je momentálne pozastavená na danom mieste v pamäti (t. j. na danom riadku kódu).

Ak chcete preskočiť ladiaci program na konkrétny riadok kódu, spustiť:

$(gdb) skok *hlavný + 2 Pokračovanie na 0x400528. Bod zlomu 2, 0x000000000040052a v hlavnom () na test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

To spôsobí, že ladiaci program skočí na pamäťové miesto 2. riadku kódu vo funkcii hlavný. Všimnite si, že tu som skočil zo začiatku hlavného na priamo druhé miesto. Preto variabilné i nebol nikdy nastavený, čo má za následok chybu ladiaceho programu, že nemôže pristupovať k obsahu pamäte na adrese premennej i.

Toto sú niektoré zo základných príkazov, ktoré vám môžu pomôcť začať s ladením spustiteľného súboru v systéme Linux. Dúfame, že vám informácie na tejto stránke pomôžu.