GDB (Gnu DeBugger) Resources
GDB is an immensely useful tool to help you debug your C programs.
- It lets you insert breakpoints into your programs so that you can stop execution and examine the contents of memory and registers.
- It supports single-stepping your program one line of source code at a time.
- It leads to much more productive debugging than just using print statements (e.g.,
printf
).
The time you spend getting familiar with GDB will be an excellent investment.
Resources
- GDB cheat sheet, a guide to the most commonly used GDB commands, useful to have open while using GDB, including while you watch the video and work on the examples below.
- Introduction to GDB, a very useful video that shows how to get started with GDB.
- An extensive tutorial, thanks to Norman Matloff at UC Davis, in case you are looking for more details.
Examples
Here are some code samples for playing with GDB with some example commands you can try:
- Array example and typical GDB commands
- Linked list example and typical GDB commands
Text User Interface
Text User Interface (TUI) mode of GDB can nicely show your code and the value of registers as you debug! Its use is entirely optional for CSE 351, but we wanted you to be aware of it as it may help some of you.
Opening TUI Mode
Most TUI commands will automatically start TUI mode, but you can also explicitly open GDB in TUI mode using:
[attu]$ gdb -tui <filename>
Layout Views
Of particular interest, you can bring up the disassembly and registers view using:
(gdb) layout asm (gdb) layout regs
Note that you want to do them in that order so that the registers window is on top. Then as you execute instructions (stepi
or si
for assembly instructions), the assembly view will highlight the next instruction (not executed yet) and the registers view will highlight any changed registers.
Formatting Issues
Unfortunately, there are some annoying formatting issues that sometimes pop up while using TUI mode. If things start to look weird, run the following command to set things straight:
(gdb) refresh