Sådan bruges GNU Debugger i Linux

GNU Debugger bruges til at fejlsøge et program, til at analysere nedbrud eller til at se, hvad programmet gør på et bestemt tidspunkt. Det blev udviklet af GNU Project i 1980'erne og har været en af ​​de mest udbredte kommandolinjefejlfindere såvel som en af ​​de mest populære GNU-software.

Lad os først skrive et lille C-program, som vi derefter fejlretter. For at komme i gang skal du oprette en ny .c fil ved hjælp af vim eller en redaktør efter eget valg:

vim test.c

Opret følgende C-program:

#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2,2; printf("Værdien af ​​i og f er: %d og %f\n", i, f); returner 0; }

Trykke Flugt for at gå til vim-kommandotilstand. Skriv derefter :wq for at gemme programmet og afslutte.

Kompiler og se om programmet kører:

gcc test.c -o test ./test Værdien af ​​i og f er: 8 og 7,700000

For at aktivere fejlfindingsunderstøttelse i et program, vi kompilerer det med -g flag. Hvis flaget ikke bruges, kan brugeren stadig fejlsøge programmet, dog med begrænsede muligheder.

gcc test.c -g -o test

For at begynde at fejlfinde vores eksekverbare fil prøve i gdb, vi løber:

gdb test

Det vil åbne gdb konsol, hvor du kan skrive gdb kommandoer. For at se en liste over kommandoer, brug Hjælp kommando.

$(gdb) hjælp Liste over klasser af kommandoer: aliaser -- Aliaser af andre kommandoer breakpoints -- Få programmet til at stoppe på bestemte punkter data -- Undersøgelse af datafiler -- Specificering og undersøgelse af filer interne -- Vedligeholdelseskommandoer er uklare -- Obskure funktioner kører -- Kørsel af programstakken -- Undersøgelse af stakstatus -- Understøttelse af statusforespørgsler -- Sporpunkter for supportfaciliteter -- Sporing af programafvikling uden at stoppe programmet brugerdefineret -- Brugerdefinerede kommandoer Skriv "hjælp" efterfulgt af et klassenavn for en liste over kommandoer i den klasse. Skriv "hjælp alle" for listen over alle kommandoer. Skriv "hjælp" efterfulgt af kommandonavn for fuld dokumentation. Skriv "apropos ord" for at søge efter kommandoer relateret til "ord". Kommandonavnsforkortelser er tilladt, hvis de er utvetydige.

Du kan derefter skrive hjælp klassenavn for at se kommandoer, der tilhører den pågældende klasse. For at søge kommandoer ved hjælp af en understreng, brug apropos understreng.

For at indstille et brudpunkt, når programmet går ind i en funktion, løb:

$(gdb) break main

Her sætter vi et brudpunkt ved den eneste funktion i vores kode, dvs. vigtigste. Brug kommandoen løb for at udføre programmet indtil næste pausepunkt, eller indtil exit.

$(gdb) køre

For at indstille et brudpunkt på et bestemt sted i en funktion, brug:

pause *hoved + 4

Dette vil konfigurere et brudpunkt ved den 4. linje af funktions hoved.

Nu, at gå over programstrømmen til næste kodelinje, bare køre trin kommando.

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

For at vise indholdet af en variabel, løb Skærm .

$(gdb) display i 6: i = 5

For at ændre indholdet af en variabel, som kan være påkrævet for at analysere afviklingen af ​​et program under specifikke værdier af en variabel, run sæt variabel =Udtryk.

$(gdb) sæt variabel i=10 $(gdb) display i 7: i = 10

Her kan 'Udtrykket' være et hvilket som helst gyldigt (aritmetisk / logisk) udtryk. For nemheds skyld tildeler vi blot en anden værdi (10) til variabel jeg.

For at udskrive samlingskoden for programmet, brug kommando adskille funktionsnavn:

Brug bare skille ad at udskrive samlingskode for hele programmet. Bemærk pilen ved en bestemt linje i montagekoden. Det angiver, at fejlfindingssessionen i øjeblikket er sat på pause på den pågældende hukommelsesplacering (dvs. den kodelinje).

For at springe debuggeren til en bestemt linje kode, løb:

$(gdb) jump *main + 2 Fortsætter ved 0x400528. Knækpunkt 2, 0x000000000040052a i main () ved test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

Dette vil få debuggeren til at springe ved hukommelsesplaceringen af ​​den anden kodelinje i funktion vigtigste. Bemærk, at jeg her hoppede fra start af hoved til direkte anden placering. Derfor variabel jeg blev aldrig indstillet, hvilket resulterer i, at debuggeren kaster fejl, at den ikke kan få adgang til hukommelsesindholdet på variabelens adresse jeg.

Dette er nogle af de grundlæggende kommandoer, som kan hjælpe dig i gang med at fejlfinde en eksekverbar fil i Linux. Vi håber, at du finder oplysningerne på denne side nyttige.