Debugga C kod med emacs och gdb: Difference between revisions
mNo edit summary |
|||
Line 109: | Line 109: | ||
Kompilera koden och starta upp debuggningen i emacs. Gå till main() rutinen. | Kompilera koden och starta upp debuggningen i emacs. Gå till main() rutinen. | ||
{{Image:Gdb_in_emacs_3.png}} | |||
[[Category:Gentoo Linux]] | [[Category:Gentoo Linux]] |
Revision as of 18:42, 30 November 2008
Denna guide visar hur man kommer igång med att debugga C kod med gdb. gdb startas i emacs för att kunna på ett enklare sätt sätta brytpunkter, titta på variabler, titta på koden m.m. Program som måste vara installerade:
- gcc
- gdb
- emacs
Ett första exempel
Följande kod används i denna guide:
Kompilera koden med debuggstöd
Kompilera koden med debuggstöd: Template:Box Kommando
Start gdb i emacs
Börja med att starta igång emacs i samma katalog som koden och ditt kompilerade program: Template:Box Kommando
Starta sedan gdb i emacs genom att trycka på M+x (Meta fås genom att trycka på Alt-knappen) och skriva kommandot gdb. Emacs kommer sedan att fråga: Run gdb (like this): gdb --annotate=3 calcsum. Tryck bara på Enter för att acceptera kommandot. Börja sedan med att sätta en brytpunkt på funktionen main(): Template:Box Kommando Kör sedan programmet fram till denna brytpunkt genom att köra kommandot run eller r: Template:Box Kommando Ett fönster med koden ska nu öppnas i ett emacs fönster:
Öppna ett fönster i emacs som visar alla lokala variabler i nuvarande funktion genom menyn Gud => GDB-Windows => Locals. Exekvera sedan rader rader genom att köra kommandot next eller n. Antingen kan man köra kommadot next två gånger eller så anger man hur många rader man vill köra efter kommandot:
Template:Box Kommando
Man kan nu se i locals fönstret att i och sum har blivit uppdaterade till 100 resp. 4950:
Skillnaden mellan step och next
Anta att vi lägger till en funktion som sköter om utskriften av summan:
Om vi nu kompilerar om koden och laddar in den i gdb och kör next kommandot, så kommer vi märka att debuggern inte går in i funktionen printsum(). För att gå in i funktioner ska man använda kommandot step eller s i gdb. Starta om exekveringen med run eller r och prova med s istället när gdb kommer till printsum() raden. Nu kommer gdb hoppa in i funktionen printsum(). Om du har fönstret med lokala variabler öppet (locals) så kommer du också märka att det automatiskt uppdateras när du kliver in i printsum(). Variablerna i och sum försvinner, då dessa inte är synliga i funktionen printsum().
Databrytpunkt
Anta att vi är intresserade att stanna exekveringen när en variabel ändrar värde, men inte vet var i koden den ändras. Då är en databrytpunkt perfekt. Anta följande kod: Template:Box Kod
Kompilera koden och starta upp debuggningen i emacs. Gå till main() rutinen.