Debugging with gdb

Examples

 

Consider the following c program:

 

bug1.c:  Divide by Zero

 

#include <stdio.h>

main()

{

int i;

for (i=10; i>=0; i--)

        printf("%d\n", 100/i);

}

 

% gcc –g –o bug1 bug1.c

% bug1

10

11

12

14

16

20

25

33

50

100

Floating exception

 

% gdb bug1

  (gdb) run

10

11

12

14

16

20

25

33

50

100

Program received signal SIGFPE, Arithmetic exception.

% gdb bug1

(gdb) list

1       #include <stdio.h>

2       main()

3       {

4       int i;

5       for (i=10; i>=0; i--)

6               printf("%d\n", 100/i);

7       }

(gdb) break 6

(gdb) run

Breakpoint 1, main () at bug1.c:6

6                  printf("%d\n", 100/i);

(gdb) next  (or step)

10

5       for (i=10; i>=0; i--)

(gdb) next

Breakpoint 1, main () at bug1.c:6

6               printf("%d\n", 100/i);

(gdb) next

11

5       for (i=10; i>=0; i--)

(gdb) display i  (or print i)

1: i = 9

(gdb) next

Breakpoint 1, main () at bug1.c:6

6               printf("%d\n", 100/i);

1: i = 8

(gdb) next

12

5       for (i=10; i>=0; i--)

1: i = 8

(gdb) next

Breakpoint 1, main () at bug1.c:6

6               printf("%d\n", 100/i);

1: i = 7

(gdb) clear 6

Deleted breakpoint 1

(gdb) continue

Continuing.

14

16

20

25

33

50

100

Program received signal SIGFPE, Arithmetic exception.

0xff29db80 in .div () from /usr/lib/libc.so.1

(gdb) quit

%

 

bug2.c: Out of bound array access.

 

#include <stdio.h>

main()

{

int a[10];

printf (“%d\n”, a[1234567]);

}

 

% gcc –g –o bug2 bug2.c

 

% bug2

Segmentation fault

 

% gdb bug2

(gdb) run

Program received signal SIGSEGV, Segmentation fault.

0x00010690 in main () at bug2.c:5

5 printf("%d\n", a[1234567]);

(gdb) quit

 

%