inital commit
commit
7aefc92849
@ -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…
Reference in New Issue