blob: 577281516c77a87c7c6b6f986cb0f22e1a6c05e0 (
plain) (
tree)
|
|
GNU Debugger (gdb) Basic Cheat Sheet
====================================
If possible, compile program with '-ggdb' to enable GDB-specific debugging
symbols.
Getting started
---------------
Launch GDB:
> gdb <executable> # note: any arguments to the exe are supplied separately
> gdb -p <process id> # attach to an already running process (requires root)
(gdb) run <argument0> <argument1> ... # Start running program
Quit GDB:
(gdb) quit
(gdb) q
Breakpoints
-----------
Set a breakpoint:
(gdb) break <function>
(gdb) break <function><+offset>
(gdb) break <address>
(gdb) b <arg>
List breakpoints:
(gdb) info break
(gdb) i b
Remove breakpoint:
(gdb) delete <id>
(gdb) d <id>
(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 <function>
(gdb) disassemble <address>
(gdb) disas <arg>
Memory
------
Examine memory:
(gdb) x/nfu <address> # List contents of memory starting at <address>
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}<address> = <value>
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 <parent|child> # Define debugging behavior on
fork()
(gdb) set detach-on-fork <on|off> # 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
|