GDB GDB Resources
Getting Started with GDB
To launch your program using gdb, run the following command:
gdb [program name]To run your program with optional command line arguments:
(gdb) run [arguments]
Alternatively, you can do this in one line with the following command:
gdb --args ./program_name [optional] [args] [here]This allows you to simply type
(gdb) run
to start your program.
Throughout the lab, we’ll use the notation
(gdb) command...
to indicate that the command should be run from within GDB.
GDB will provide several helpful features. First, it will output similar debugging information as Valgrind upon errors such as segmentation faults. Second, and more important, it allows you to stop the program execution, move around, and view the state of the running program at any point in time.
To do that, we will use the following common commands (see more details in the slides). We’ll also define the abbreviations of these commands, so you don’t have to type the full names of these commands when you want to use them.
Walking through your code.
break [file:line number]- Example usage:
break skipList.cpp:40 - Create a breakpoint at the specified line. This will stop the
program’s execution when it is being ran. (See
run). - When your program is stopped (by a previous use of
break) in a certain file,break nwill create a breakpoint at linenin that same file. - Note: There are other variations on how to use
breakhere. One variation is breaking at a function belonging to a class. Example:break SkipList::insert. - Abbreviation:
b. Example usage:b skipList.cpp:40
- Example usage:
clear [file:line number]- Removes a breakpoint designated by
break.
- Removes a breakpoint designated by
run (arguments)- Runs the program, starting from the main function.
- Abbreviation:
r.
list- Shows the next few lines where the program is stopped.
layout src- Shows an updating window with your source code and the current line of execution.
- Usually easier than type
listevery line or referring back to your open code
next- Continues to the next line executed. This does not enter any
functions. (See
stepfor this). - Abbreviation:
n.
- Continues to the next line executed. This does not enter any
functions. (See
step- Continues to the next line executed. Unlike
next, this will step into any proceeding functions - Abbreviation:
s.
- Continues to the next line executed. Unlike
finish- Steps out of a function.
- Abbreviation:
fin.
continue- Continues the execution of the program
after it’s already started to run. continueis usually used after you hit a breakpoint. - Abbreviation:
c.
- Continues the execution of the program
Viewing the state of your code.
info args- Shows the current arguments to the function.
- If you are stopped within a class’s function, the
thisvariable will appear.
info locals- Shows the local variables in the current function.
print [variable]- Prints the value of a variable or expression.
Example:
print foo(5) - The functionality of
printis usually superseded byinfo localsif you are looking to print local variables. But if you want to view object member variables,printis the way to go. - Example:
print list->head. Orprint *integer_ptr. - Abbreviation:
p.
- Prints the value of a variable or expression.
Example:
backtrace- Shows the call stack of your program
- The list of which function has called the function you are in, recursively
frame [n]- Used to go to the frame numbers as seen in backtrace
Other useful commands.
- ctrl-l (clears the screen)
- ctrl-a (moves cursor to beginning of prompt)
- ctrl-e (moves cursor to end of prompt)