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
%