GNU Debugger se koristi za otklanjanje pogrešaka u programu, za analizu pada ili da vidi što program radi u određenoj točki. Razvio ga je GNU Project 1980-ih i bio je jedan od najčešće korištenih alata za ispravljanje pogrešaka naredbenog retka, kao i jedan od najpopularnijih GNU softvera.
Napišimo najprije mali C program koji ćemo potom otkloniti. Za početak izradite novi .c
datoteku koristeći vim
ili bilo koji urednik po vašem izboru:
vim test.c
Napravite sljedeći C program:
#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2,2; printf("Vrijednost i i f su: %d i %f\n", i, f); vrati 0; }
Pritisnite Pobjeći
da biste otišli u naredbeni način vim. Zatim upišite :wq
za spremanje programa i izlaz.
Prevedite i provjerite radi li program:
gcc test.c -o test ./test Vrijednost i i f su: 8 i 7,700000
Da biste omogućili podršku za otklanjanje pogrešaka u programu, sastavljamo ga s -g
zastava. Ako se zastavica ne koristi, korisnik i dalje može otkloniti pogreške u programu, iako s ograničenim mogućnostima.
gcc test.c -g -o test
Za početak otklanjanja pogrešaka našu izvršnu datoteku test
u gdb
, trčimo:
gdb test
Otvorit će se gdb
konzole, gdje možete upisati gdb
naredbe. Za pregled popisa naredbi koristite Pomozite
naredba.
$(gdb) help Popis klasa naredbi: aliasi -- pseudonime prelomnih točaka drugih naredbi -- Zaustavljanje programa u određenim točkama podaci -- Pregled datoteka s podacima -- Određivanje i ispitivanje unutarnjih datoteka datoteka -- Naredbe za održavanje nejasne -- Nejasne značajke izvode se -- Pokretanje programskog stoga -- Ispitivanje statusa stoga -- Podrška za upite o statusu -- Podržavamo objekte za praćenje -- Praćenje izvođenja programa bez zaustavljanja programa korisnički definirano -- Korisnički definirane naredbe Upišite "help " nakon čega slijedi naziv klase za popis naredbi u toj klasi. Upišite "help all" za popis svih naredbi. Upišite "help" nakon čega slijedi naziv naredbe za punu dokumentaciju. Upišite "apropos word" za traženje naredbi povezanih s "word". Dopuštene su kratice naziva naredbi ako su nedvosmislene.
Zatim možete upisati pomoć naziv_razreda
da vidite naredbe koje pripadaju toj klasi. Za pretraživanje naredbi koristeći podniz, koristite apropos podniz
.
Za postavljanje točke prekida kada program uđe u funkciju, trčanje:
$(gdb) glavni prekid
Ovdje postavljamo točku prekida na jedinoj funkciji u našem kodu, tj. glavni
. Koristite naredbu trčanje
za izvođenje programa do sljedeće točke prekida ili do izlaza.
$(gdb) pokrenuti
Da biste postavili prijelomnu točku na određeno mjesto u funkciji, koristiti:
prekid *glavni + 4
Ovo će postaviti točku prekida u 4. retku glavne funkcije.
Sada, za prelazak preko tijeka programa na sljedeći redak koda, jednostavno pokrenite korak
naredba.
$(gdb) korak 5: float f = 5,5;
Za prikaz sadržaja varijable, trčanje prikaz
.
$(gdb) prikaz i 6: i = 5
Za izmjenu sadržaja varijable, što bi moglo biti potrebno za analizu pokretanja programa pod određenim vrijednostima varijable, run set varijabla =Izraz
.
$(gdb) postaviti varijablu i=10 $(gdb) prikaz i 7: i = 10
Ovdje 'Izraz' može biti bilo koji valjani (aritmetički / logički) izraz. Radi jednostavnosti samo dodijelimo drugu vrijednost (10) varijabli i
.
Za ispis asemblerskog koda za program, koristiti naredbu rastaviti naziv funkcije
:
Koristite samo rastaviti
za ispis asemblerskog koda za cijeli program. Obratite pažnju na strelicu na određenom retku u kodu za sklapanje. Označava da je sesija otklanjanja pogrešaka trenutno pauzirana na toj određenoj memorijskoj lokaciji (tj. u toj liniji koda).
Da biste preskočili program za ispravljanje pogrešaka na određeni redak koda, trčanje:
$(gdb) skok *main + 2 Nastavlja se na 0x400528. Prijelomna točka 2, 0x000000000040052a u main () na test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i =
Time će program za ispravljanje pogrešaka skočiti na memorijsku lokaciju 2. retka koda u funkciji glavni
. Imajte na umu da sam ovdje skočio s početka glavne na izravno drugu lokaciju. Dakle, varijabilna i
nikada nije postavljeno, što rezultira greškom ispravljača pogrešaka da ne može pristupiti memorijskom sadržaju na adresi varijable i
.
Ovo su neke od osnovnih naredbi koje vam mogu pomoći da počnete s otklanjanjem pogrešaka u izvršnoj datoteci u Linuxu. Nadamo se da će vam informacije na ovoj stranici biti od pomoći.