Tue Nov 10 10:05:21 EST 1998
This is a simple example of using gdb to print the stack.
Below we debug rec2.c using gdb
and we set breakpoints at lines 7 and 16. Each time we hit a
breakpoint, we use the where command to print the stack.
Try it out. You should see how the output of gdb matches
the lecture note example of running rec2.c:
UNIX> gdb rec2
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd),
Copyright 1996 Free Software Foundation, Inc...
(gdb) break 7
Breakpoint 1 at 0x15f1: file rec2.c, line 7.
(gdb) break 16
Breakpoint 2 at 0x163a: file rec2.c, line 16.
(gdb) run
Starting program: /lymon/homes/cs140/www-home/notes/Recursion/rec2
Breakpoint 2, main () at rec2.c:16
16 a(3);
(gdb) print i
$1 = 16
(gdb) where
#0 main () at rec2.c:16
(gdb) cont
Continuing.
In procedure a: i = 3, j = 15
Breakpoint 1, a (i=3) at rec2.c:7
7 if (i > 0) a(i-1);
(gdb) where
#0 a (i=3) at rec2.c:7
#1 0x1641 in main () at rec2.c:16
(gdb) print j
$2 = 15
(gdb) cont
Continuing.
In procedure a: i = 2, j = 10
Breakpoint 1, a (i=2) at rec2.c:7
7 if (i > 0) a(i-1);
(gdb) where
#0 a (i=2) at rec2.c:7
#1 0x1601 in a (i=3) at rec2.c:7
#2 0x1641 in main () at rec2.c:16
(gdb) cont
Continuing.
In procedure a: i = 1, j = 5
Breakpoint 1, a (i=1) at rec2.c:7
7 if (i > 0) a(i-1);
(gdb) where
#0 a (i=1) at rec2.c:7
#1 0x1601 in a (i=2) at rec2.c:7
#2 0x1601 in a (i=3) at rec2.c:7
#3 0x1641 in main () at rec2.c:16
(gdb) print i, j
$3 = 5
(gdb) cont
Continuing.
In procedure a: i = 0, j = 0
Breakpoint 1, a (i=0) at rec2.c:7
7 if (i > 0) a(i-1);
(gdb) where
#0 a (i=0) at rec2.c:7
#1 0x1601 in a (i=1) at rec2.c:7
#2 0x1601 in a (i=2) at rec2.c:7
#3 0x1601 in a (i=3) at rec2.c:7
#4 0x1641 in main () at rec2.c:16
(gdb) cont
Continuing.
Later In procedure a: i = 0, j = 0
Later In procedure a: i = 1, j = 5
Later In procedure a: i = 2, j = 10
Later In procedure a: i = 3, j = 15
main: 16
Program exited with code 011.
(gdb) quit