CS140 Lecture notes -- Recursion Debugging Example

  • Jim Plank
  • Directory: ~cs140/www-home/notes/Recursion/debug.html
  • Lecture notes: http://www.cs.utk.edu/~cs140/notes/Recursion/debug.html
  • 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