Kako koristiti GNU Debugger u Linuxu

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.