Hvordan bruke GNU Debugger i Linux

GNU Debugger brukes til å feilsøke et program, analysere krasj, eller for å se hva programmet gjør på et bestemt punkt. Den ble utviklet av GNU-prosjektet på 1980-tallet og har vært en av de mest brukte kommandolinjefeilsøkerne samt en av de mest populære GNU-programvarene.

La oss først skrive et lite C-program som vi deretter skal feilsøke. For å komme i gang, opprett en ny .c fil ved hjelp av vim eller hvilken som helst redaktør etter eget valg:

vim test.c

Lag følgende C-program:

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

trykk Flukt for å gå til vim-kommandomodus. Skriv deretter :wq for å lagre programmet og avslutte.

Kompiler og se om programmet kjører:

gcc test.c -o test ./test Verdien av i og f er: 8 og 7,700000

For å aktivere feilsøkingsstøtte i et program, vi kompilerer det med -g flagg. Hvis flagget ikke brukes, kan brukeren fortsatt feilsøke programmet, om enn med begrensede alternativer.

gcc test.c -g -o test

For å begynne å feilsøke vår kjørbare fil test i gdb, vi løper:

gdb test

Den vil åpne gdb konsoll, hvor du kan skrive inn gdb kommandoer. For å se en liste over kommandoer, bruk hjelp kommando.

$(gdb) hjelp Liste over klasser av kommandoer: aliaser -- Aliaser til andre kommandoer bruddpunkter -- Får programmet til å stoppe på bestemte punkter data -- Undersøker datafiler -- Spesifiserer og undersøker filer internt -- Vedlikeholdskommandoer obskure -- Obskure funksjoner som kjører -- Kjøre programstabelen -- Undersøke stabelstatus -- Statusforespørsler støtte -- Sporepunkter for støttefasiliteter -- Sporing av programkjøring uten å stoppe programmet brukerdefinert -- Brukerdefinerte kommandoer Skriv "hjelp" etterfulgt av et klassenavn for en liste over kommandoer i den klassen. Skriv "hjelp alle" for listen over alle kommandoer. Skriv "hjelp" etterfulgt av kommandonavn for full dokumentasjon. Skriv "apropos ord" for å søke etter kommandoer relatert til "ord". Kommandonavnforkortelser er tillatt hvis de er entydige.

Du kan deretter skrive hjelpe klassenavn for å se kommandoer som tilhører den klassen. For å søke kommandoer ved hjelp av en understreng, bruk apropos understreng.

For å angi et bruddpunkt når programmet går inn i en funksjon, løpe:

$(gdb) break main

Her setter vi et bruddpunkt ved den eneste funksjonen i koden vår, dvs. hoved-. Bruk kommandoen løpe for å kjøre programmet til neste bruddpunkt, eller til avslutning.

$(gdb) kjøre

For å angi et bruddpunkt på et bestemt sted i en funksjon, bruk:

pause *hoved + 4

Dette vil sette opp et bruddpunkt på den fjerde linjen i hovedfunksjonen.

Nå, for å gå over programflyten til neste kodelinje, bare kjør steg kommando.

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

For å vise innholdet i en variabel, løpe vise .

$(gdb) display i 6: i = 5

For å endre innholdet i en variabel, som kan være nødvendig for å analysere kjøringen av et program under spesifikke verdier av en variabel, kjøring sett variabel =Uttrykk.

$(gdb) sett variabel i=10 $(gdb) display i 7: i = 10

Her kan "Uttrykket" være et hvilket som helst gyldig (aritmetisk / logisk) uttrykk. For enkelhets skyld tilordner vi bare en annen verdi (10) til variabel Jeg.

For å skrive ut monteringskoden for programmet, bruk kommando demonter funksjonsnavn:

Bruk bare demontere for å skrive ut monteringskode for hele programmet. Legg merke til pilen på en bestemt linje i monteringskoden. Det angir at feilsøkingsøkten for øyeblikket er satt på pause på den spesielle minneplasseringen (dvs. den kodelinjen).

For å hoppe feilsøkeren til en bestemt linje med kode, løpe:

$(gdb) jump *main + 2 Fortsetter på 0x400528. Knekkpunkt 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å feilsøkeren til å hoppe til minneplasseringen til den andre kodelinjen i funksjon hoved-. Merk at her hoppet jeg fra start av hoved til direkte andre plassering. Derfor variabel Jeg ble aldri satt, noe som resulterer i at feilsøkeren får feilen at den ikke får tilgang til minneinnholdet på adressen til variabelen Jeg.

Dette er noen av de grunnleggende kommandoene som kan hjelpe deg med å komme i gang med å feilsøke en kjørbar fil i Linux. Vi håper du finner informasjonen på denne siden nyttig.