commit 7aefc92849862f4c401d12ba48f84cb3f2fad27e Author: Jasper Spahl Date: Thu Jan 13 11:02:33 2022 +0100 inital commit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c9392b7 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +program: main.c + gcc -g -o program main.c + +debug: program + gdb program + +pdf: README.md + pandoc README.md --pdf-engine=xelatex -o README.pdf + +latex: README.md + pandoc README.md -o README.tex + diff --git a/README.md b/README.md new file mode 100644 index 0000000..c325e56 --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ +--- +title: Debuging with gdb +date: \today +author: Jasper Levin Spahl +documentclass: scrartcl +lang: de +papersize: a4 + +--- + +# How to debug with `gdb` + +Given we have as simple C program with a bug + +```c +/* main.c */ +#include +int main() +{ + int balance = 100; + int target = 1000; + float rate = 0.1; + int yeat = 0; + do + { + float interest = balance * rate; + balance = balance + interest; + year++ + } while ( balance >= target) + printf("%d No. of years to achieve target balance.\n", year); + return 0; +} +``` + +To find bug we first have to compile the program with +`gcc -g -o program main.c`. +The `-g` flag is used to compile the program with debug symbols. +Now that we have compiled the program we can open int `gdb` + +Because we don't want to type all these long commands everytime we +compile we can use a `Makefile` to make our lifes easyer. + +```Makefile +# Makefile +program: main.c + gcc -g -o program main.c +debug: program + gdb program +``` + +Now writing `make debug` in the terminal will compile the program and +open it in gdb. + +To debug the program we first have to set a breakpoint +``` +(gdb) b main +Breakpoint 1 at 0x1141: file main.c, line4. +``` + +To run the program in gdb type `run` +``` +(gdb) run +Starting program: program + +Breakpoint 1, main () at main.c:4 +4 int balance = 100; +``` + +To step with `s` +``` +(gdb) s +5 int target=1000; +(gdb) s +6 float rate = 0.1; +(gdb) s +7 int year = 0; +(gdb) s +10 float interest = balance * rate; +(gdb) s +11 balance = balance + interest; +(gdb) s +12 year++; +``` + +At line `12` we want to take a look at the variables. +The gdb command for that is `p` +``` +(gdb) p balance +$1 = 110 +(gdb) p rate +$2 = 0.100000001 +(gdb) p interest +$3 = 10 +``` diff --git a/main.c b/main.c new file mode 100644 index 0000000..ffa95a1 --- /dev/null +++ b/main.c @@ -0,0 +1,15 @@ +#include +int main() +{ + int balance = 100; + int target = 1000; + float rate = 0.1; + int year = 0; + do { + float interest = balance * rate; + balance = balance + interest; + year++; + } while ( balance < target ); + printf("%d No. of years to achieve target balance.\n", year); + return 0; +}