Kako uporabljati GNU Debugger v Linuxu

Razhroščevalnik GNU se uporablja za odpravljanje napak v programu, za analizo sesutja ali za ogled, kaj program počne na določeni točki. Razvil ga je projekt GNU v osemdesetih letih in je bil eden najpogosteje uporabljenih razhroščevalcev ukazne vrstice ter eden najbolj priljubljenih programov GNU.

Najprej napišemo majhen program C, ki ga bomo nato odpravili. Za začetek ustvarite novo .c datoteko z uporabo vim ali kateri koli urejevalnik po vaši izbiri:

vim test.c

Ustvarite naslednji program C:

#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2,2; printf("Vrednost i in f sta: %d in %f\n", i, f); vrni 0; }

Pritisnite Pobegniti da greste v ukazni način vim. Nato vnesite :wq da shranite program in zapustite.

Prevedite in preverite, ali se program izvaja:

gcc test.c -o test ./test Vrednosti i in f so: 8 in 7,700000

Če želite omogočiti podporo za odpravljanje napak v programu, ga sestavimo z -g zastavo. Če se zastavica ne uporablja, lahko uporabnik še vedno odpravi napake v programu, čeprav z omejenimi možnostmi.

gcc test.c -g -o test

Za začetek odpravljanja napak naša izvedljiva datoteka test v gdb, mi tečemo:

gdb test

Odprlo bo gdb konzolo, kamor lahko vnesete gdb ukazov. Če si želite ogledati seznam ukazov, uporabite pomoč ukaz.

$(gdb) help Seznam razredov ukazov: vzdevki -- vzdevki drugih ukazov prelomnih točk -- zaustavitev programa na določenih točkah podatki -- pregled podatkovnih datotek -- določanje in pregledovanje notranjosti datotek -- ukazi za vzdrževanje prikriti -- nejasne funkcije se izvajajo -- Zagon programskega sklada -- Preverjanje stanja sklada -- Podpora za poizvedbe o statusu -- Podporne naprave za sledenje -- Sledenje izvajanju programa brez zaustavitve programa, ki ga definira uporabnik -- Uporabniško definirani ukazi Vnesite "help ", ki mu sledi ime razreda za seznam ukazov v tem razredu. Vnesite "pomoč vsem" za seznam vseh ukazov. Vnesite "pomoč", ki mu sledi ime ukaza za celotno dokumentacijo. Vnesite "apropos word" za iskanje ukazov, povezanih z "word". Okrajšave imen ukazov so dovoljene, če so nedvoumne.

Nato lahko vnesete pomoč ime_razreda da vidite ukaze, ki pripadajo temu razredu. Za iskanje ukazov z uporabo podniza uporabite glede podniza.

Če želite nastaviti prekinitev, ko program vstopi v funkcijo, teči:

$(gdb) break main

Tukaj nastavimo prekinitev pri edini funkciji v naši kodi, tj. glavni. Uporabite ukaz teči za izvajanje programa do naslednje prekinitvene točke ali do izhoda.

$(gdb) zaženite

Če želite nastaviti prekinitev na določeni lokaciji v funkciji, uporaba:

prelom *glavni + 4

To bo postavilo prekinitev v 4. vrstici glavne funkcije.

zdaj, za prehod čez tok programa v naslednjo kodno vrstico, preprosto zaženite korak ukaz.

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

Če želite prikazati vsebino spremenljivke, teči prikazovalniku .

$(gdb) prikaže i 6: i = 5

Če želite spremeniti vsebino spremenljivke, ki bi lahko bila potrebna za analizo izvajanja programa pod določenimi vrednostmi spremenljivke, run set spremenljivka =Izraz.

$(gdb) nastavite spremenljivko i=10 $(gdb) prikaz i 7: i = 10

Tukaj je lahko 'Izraz' kateri koli veljaven (aritmetični/logični) izraz. Zaradi preprostosti spremenljivki samo dodelimo drugo vrednost (10). jaz.

Če želite natisniti montažno kodo za program, uporabite ukaz ime funkcije razstavi:

Uporabite samo razstaviti za tiskanje montažne kode za celoten program. Upoštevajte puščico v določeni vrstici v montažni kodi. Označuje, da je seja odpravljanja napak trenutno zaustavljena na določeni pomnilniški lokaciji (tj. v tej vrstici kode).

Če želite razhroščevalnik preskočiti na določeno vrstico kode, teči:

$(gdb) skok *main + 2 Nadaljevanje pri 0x400528. Prelomna točka 2, 0x0000000000040052a v main () pri test.c:3 3 int main() { 1: i = 2: f = 3: h = (prazno *) 0x0 4: main = {int ()} 0x400526 5: i = 

S tem bo razhroščevalnik skočil na pomnilniško mesto 2. vrstice kode v funkciji glavni. Upoštevajte, da sem tukaj skočil z začetka glavne na neposredno drugo lokacijo. Zato spremenljivo jaz ni bil nikoli nastavljen, kar povzroči napako razhroščevalnika, da ne more dostopati do vsebine pomnilnika na naslovu spremenljivke jaz.

To je nekaj osnovnih ukazov, ki vam lahko pomagajo začeti z odpravljanjem napak v izvedljivi datoteki v Linuxu. Upamo, da so vam informacije na tej strani v pomoč.