inital commit

develop
Jasper Levin Spahl 3 years ago
commit 7aefc92849
Signed by: jasper
GPG Key ID: 91991C9808A18BB0

@ -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

@ -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 <stdio.h>
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
```

@ -0,0 +1,15 @@
#include <stdio.h>
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;
}
Loading…
Cancel
Save