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.