3.4. Debug the Executable

To start GDB, use the following commands:

gdb hello

After the initial copyright and configuration information, GDB returns its own prompt, (gdb). The following is a sample debugging session:

  1. To set a breakpoint, type:

    break main

    The following output displays:

    Breakpoint 1 at 0x132: file hello.c, line 15.

    Note the exact address and line number may vary, depending upon the target architecture being debugged and the exact layout of the C code in the hello.c file.

  2. To run the program, type:

    run

    The following output displays (when the program stops at a breakpoint):

        Starting program: hello
        Breakpoint 1, main () at hello.c:15
        15 a = 3;

    Again note that the exact line number and instruction displayed is dependent upon the source code layout.

  3. To print the value of variable, a, type:

    print a

    The following output displays:

    $1 = 0
  4. To execute the next command, type next:

    next

    The following output displays:

        16 b = 4;
  5. To display the value of a again, type:

    print a

    The following output displays:

        $2 = 3
  6. To display the program being debugged, type:

    list

    The following output displays:

    12         int
    13         main (void)
    14         {
    15           int b;
    16
    17           a = 3;
    18           b = 4;
    19
    20           printf ("Hello, world!\n");
    21
    22           foo (b);
    23
    24           return 0;
    25         }
  7. To list a specific function code, use the list command with the name of the function to be display. For example, type:

    list foo

    The following output displays:

     1          #include <stdio.h>
     2
     3          int a, c;
     4
     5          static void
     6          foo (int b)
     7          {
     8            c = a + b;
     9            printf ("%d + %d = %d\n", a, b, c);
    10          }
  8. To set a breakpoint at line seven, enter the following input (set a breakpoint at any line by entering break linenumber, where linenumber is the specific line number to break):

    break 8

    The following output displays:

    Breakpoint 2 at 0xf4: file hello.c, line 8.
  9. To resume normal execution of the program until the next breakpoint, type:

    continue

    The following output displays:

    Continuing.
    Hello, world!
    Breakpoint 2, foo (b=4) at hello.c:8
    8 c = a + b;
  10. To step to the next instruction and execute it, type:

    step

    The following output displays:

    9 printf ("%d + %d = %d\n", a, b, c);
  11. To display the value of c, type:

    print c

    The following output displays:

    $3 = 7
  12. To see how you got to where you are, type:

    backtrace

    The following output displays:

    #0 foo (b=4) at hello.c:9
    #1 0x15c in main () at hello.c:18
  13. To exit the program and quit the debugger, type:

    quit