GNU Debugger (gdb) Basic Cheat Sheet ==================================== If possible, compile program with '-ggdb' to enable GDB-specific debugging symbols. Getting started --------------- Launch GDB: > gdb # note: any arguments to the exe are supplied separately > gdb -p # attach to an already running process (requires root) (gdb) run ... # Start running program Quit GDB: (gdb) quit (gdb) q Breakpoints ----------- Set a breakpoint: (gdb) break (gdb) break <+offset> (gdb) break
(gdb) b List breakpoints: (gdb) info break (gdb) i b Remove breakpoint: (gdb) delete (gdb) d (gdb) d # deletes all breakpoints Debugging --------- Inspect registers: (gdb) info registers (gdb) i r Get call stack / backtrace: (gdb) backtrace (gdb) bt Single-step program: (gdb) display/i $pc # If debugging symbols missing, set prompt to display current instruction disassembly (gdb) n # next source code statement (gdb) s # step source code statement (will follow calls) (gdb) ni # next machine instruction (gdb) si # step machine instruction (will follow calls) (gdb) continue # resume execution (until next breakpoint) (gdb) c (gdb) finish # resume execution (until ret - step out of function) (gdb) fin Disassemble program: (gdb) disassemble (gdb) disassemble
(gdb) disas Memory ------ Examine memory: (gdb) x/nfu
# List contents of memory starting at
and interpret data according to n, f, u 'n' is a repeat count: Specifies how many values to display 'f' is the display format: one of x, d, u, o, t, a, c, f, s, i, m 'u' is the unit size: one of b, h, w, g Example: (gdb) x/32xg $sp # Display the first 32 64-bit 'giant' words on the stack Alter memory: (gdb) set {type}
= Example: (gdb) set {int}0x7fffffdead = 69 # Write the value 69 to given address as a 32-bit integer Process forks ------------- (gdb) set follow-fork-mode # Define debugging behavior on fork() (gdb) set detach-on-fork # If set to 'off' gdb will keep a debugger on both processes - Default is on (gdb) show follow-fork-mode # Check config (gdb) show detach-on-fork # Check config