Så här debuggar du ett C eller C ++-program på Linux med gdb
Den normala processen för att utveckla datorprogram går något så här: skriv en kod, kompilera koden, kör programmet. Om programmet inte fungerar som förväntat går du tillbaka till koden för att leta efter fel (buggar) och upprepa cykeln igen.
Beroende på programmets komplexitet och arten av buggarna finns det tillfällen när du kan göra med lite extra hjälp vid spårning av fel. Det här är vad en "debugger" gör. Det låter dig granska ett datorprogram medan det körs. Du kan se värdena för de olika variablerna, du kan undersöka innehållet i minnet och du kan stoppa programmet vid en viss punkt och gå igenom koden en rad i taget.
Den primära debuggeren på Linux är GNU-debuggeren (gdb). Det kanske redan är installerat på ditt system (eller en nedtonad version som kallas gdb-minimal), men sägst duktigt följande kommando i en terminal:
sudo apt-get install gdb
För att kunna använda debuggeren måste du berätta för kompilatorn att den innehåller felsökningsinformation i det binära. Skapa en fil som heter "hello10.c" med nano:
nano hello10.c
Kopiera och klistra in i följande kod:
#include main () {int i; för (i = 0; i <10; i ++) printf ("% d", i); }
"-g" -flaggan berättar kompilatorn att producera felsökningsinformation, så att kompilera programanvändningen:
gcc -g -o hej10 hello10.c
För att starta felsökning av programtypen:
gdb hallo10
Vid denna punkt om du bara börjar köra programmet (med kommandot "kör"), kommer programmet att utföras och avslutas innan du får chansen att göra någonting. För att stoppa det måste du skapa en "brytpunkt" som stoppar programmet vid en viss punkt. Det enklaste sättet att göra detta är att berätta felsökaren att stoppa i funktionen "main ()":
bryta huvudet
Starta nu programmet:
springa
Felsökaren har slutat vid den första körbara koden, t.ex. "för" -loopen. För att gå till nästa rad, skriv "next" eller "n" för kort. Fortsätt använda "nästa" för att repetera runt slingan ett par gånger:
För att inspektera värdet på en variabel använd kommandot "skriv ut". I vårt exempelprogram kan vi granska innehållet i variabeln "i":
skriv ut i
Upprepa runt slingan och några gånger och se hur "jag" ändras:
nästa nästa nästa nästa utskrift i
I exemplet ovan har "jag" uppnått värdet 4. Loopen fortsätter medan "I" är mindre än 10. Du kan ändra värdet på en variabel med "set var". Skriv följande i gdb för att ställa in "i" till 10.
set var jag = 10 skriv ut nästa
Det kan hända att du måste göra en annan "nästa" (beroende på var programmet stoppades när du ställde in "i" till 10), men när "för" -linjen nästa körs kommer slingan att gå ut, eftersom "jag" inte är längre mindre än 10.
Kommandot "nästa" drar inte ner i funktioner utan snarare funktionen exekveras, och debuggeren stoppar igen vid nästa rad efter funktionen. Om du vill gå in i en funktion, använd kommandot "steg" eller "s" för kort.
Ett annat sätt att felsöka ditt program är att ställa in en klocka på en variabel. Vad detta gör stoppar programmet när variabeln ändras. Starta om programmet igen genom att skriva "run". Eftersom programmet redan körs frågar debuggen om du vill starta den igen från början.
Programmet kommer att sluta i huvudsak (eftersom vi inte tog bort brytpunkten). Ställ en klocka på "jag":
titta på jag fortsätter
Kommandot "fortsätt" startar programmet körs igen till nästa brytpunktsförhållande. I det här fallet kommer det att springa igen tills variabeln "jag" ändras (på grund av klockan).
För att sluta felsöka, använd bara kommandot "avsluta".
Om du vill lära dig mer om gdb är det en bra plats att starta GDB-dokumentationen. Om du har några problem med ovanstående exempel, använd kommentarfältet nedan och vi kommer se om vi kan hjälpa till.