From a2a34551dd82d57de7da8354e4f995ef76390d99 Mon Sep 17 00:00:00 2001 From: Malfurious Date: Fri, 30 Jul 2021 01:20:53 -0400 Subject: Add gdb cheat sheet Signed-off-by: Malfurious --- docs/re/gdb.txt | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/re/gdb.txt (limited to 'docs') diff --git a/docs/re/gdb.txt b/docs/re/gdb.txt new file mode 100644 index 0000000..5772815 --- /dev/null +++ b/docs/re/gdb.txt @@ -0,0 +1,101 @@ +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 -- cgit v1.2.3