Slik debugger du et C eller C ++-program på Linux ved hjelp av gdb
Den normale prosessen for å utvikle dataprogrammer går noe slikt: skriv noen kode, kompilere koden, kjør programmet. Hvis programmet ikke virker som forventet, går du tilbake til koden for å lete etter feil (feil) og gjenta syklusen på nytt.
Avhengig av programmets kompleksitet og arten av feilene, er det tidspunkter når du kan gjøre med litt ekstra hjelp til å spore feilene. Dette er hva en "debugger" gjør. Det lar deg undersøke et dataprogram mens det kjører. Du kan se verdiene til de forskjellige variablene, du kan undersøke innholdet i minnet, og du kan stoppe programmet på et bestemt punkt og gå gjennom koden en linje av gangen.
Den primære debuggeren på Linux er GNU debuggeren (gdb). Det kan allerede være installert på systemet ditt (eller en slank nedversjon kalt gdb-minimal), men vær sikker på å skrive følgende kommando i en terminal:
sudo apt-get install gdb
For å bruke debuggeren må du fortelle kompilatoren å inkludere feilsøkingsinformasjon i binæret. Lag en fil som heter "hello10.c" ved hjelp av nano:
nano hello10.c
Kopier og lim inn i følgende kode:
#include main () {int i; for (i = 0; i <10; i ++) printf ("% d", i); }
"-g" -flagget forteller kompilatoren å produsere feilsøkingsinformasjon, så å kompilere programbruk:
gcc -g -o hei10 hello10.c
For å starte feilsøking av programtypen:
gdb hello10
På dette tidspunktet hvis du bare begynner å kjøre programmet (ved hjelp av "run" -kommandoen), vil programmet utføre og fullføre før du får sjansen til å gjøre noe. For å stoppe det, må du opprette et "breakpoint" som stopper programmet på et bestemt punkt. Den enkleste måten å gjøre dette på er å fortelle debuggeren å stoppe i funksjonen "main ()":
bryte hoved
Start nå programmet:
løpe
Feilsøkeren har stoppet ved den første kjørbare koden, for eksempel "for" -løkken. For å gå til neste linje, skriv "neste" eller "n" for kort. Fortsett å bruke "neste" for å gjenta rundt løkken et par ganger:
For å inspisere verdien av en variabel, bruk kommandoen "print". I vårt eksempelprogram kan vi undersøke innholdet i variabelen "i":
skriv ut i
Gjenta rundt løkken og få flere ganger og se hvordan "jeg" endres:
neste neste neste neste utskrift i
I eksemplet ovenfor har "jeg" nådd verdien av 4. Sløyfen vil fortsette mens "jeg" er mindre enn 10. Du kan endre verdien av en variabel ved å bruke "sett var". Skriv inn følgende i gdb for å sette "i" til 10.
sett var jeg = 10 skriv ut neste
Du må kanskje gjøre en annen "neste" (avhengig av hvor programmet ble stanset når du setter "jeg" til 10), men når "for" -linjen blir neste kjørt, går sløyfen ut, fordi "jeg" er nei lengre mindre enn 10.
Kommandoen "neste" drar ikke ned i funksjoner, men snarere blir funksjonen utført, og debuggeren stopper igjen på neste linje etter funksjonen. Hvis du vil gå inn i en funksjon, bruk kommandoen "trinn" eller "s" for kort.
En annen måte å feilsøke programmet på er å sette en klokke på en variabel. Hva dette gjør er å stoppe programmet når variabelen endres. Start programmet på nytt ved å skrive "kjøre". Siden programmet allerede kjører, spør debuggeren om du vil starte den igjen fra begynnelsen.
Programmet stopper i hovedsak (da vi ikke fjernet bruddpunktet). Sett nå en klokke på "jeg":
se jeg fortsetter
Kommandoen "fortsett" starter programmet kjører igjen til neste brytepunktstilstand. I dette tilfellet vil det løpe igjen til variabelen "jeg" endres (på grunn av klokken).
For å stoppe feilsøking, bruk bare kommandoen "avslutte".
Hvis du vil lære mer om gdb, så er et godt sted å starte GDB-dokumentasjonen. Hvis du har problemer med eksemplene ovenfor, vennligst bruk kommentarene nedenfor og vi vil se om vi kan hjelpe.