# gdb -------------------------------------------------------------------------------- # toc ------ |gdb| |opts| |prompt| |user_commands| |hooks| |flows| # gdb(1) *gdb* ========= gdb [opts] [exe [coredump | pid]] gdb [opts] --args exe opts: *opts* -p attach to pid -x execute script before prompt -ex execute command before prompt --tty set I/O tty for debugee (see *prompt* for details) prompt: *prompt* tty set as tty for debugee. make sure nobody reads from target tty, easiest is to spawn a shell and run > while true; do sleep 1024; done set follow-fork-mode specify which process to follow on fork(2) sharedlibrary [regex] load symbols of shared lib, if REGEX then only symbols for matching libs break [-qualified] thread set a breakpoint only on a specific thread -qualified: sym must be fully qualified (quiet handy to set breakpoints on C symbols in C++ contexts) rbreak set breakpoints based on symbols matching regex is internally expanded to .*.* so 'rbreak foo' matches barfoobar() command [bp_list] define commands to run after breakpoint hit if BP_LIST not supplied attach command to last created bp BP_LIST: space separates list, eg 'command 2 5-8' to run command for bp 2,5,6,7,8 info functions [regex] list functions according to REGEX, if REGEX empty, list all info variables [regex] list variables according to REGEX, if REGEX empty, list all info handle [signal] list bevahior for SIGNAL, if SIGNAL empty list all signals handle signal configure how gdb handles SIGNAL which is ment for the debugee : stop/nostop catch signal in gdb and break print/noprint print message when gdb catches signal pass/nopass pass signal down to debugee noignore/ignore synonyms for catch signal create a catchpoint for SIGNAL user commands: *user_commands* define defines user command to be run # cmds in prompt or script end document define documentation for cmd # docu end help user-defined list user defined commands help list documentation for command hooks: *hooks* define hook- run commands defined in hook before # cmds executing end define hookpost- run commands defined in hookpost after # cmds executing end flows: *flows* # catch SIGSEGV and execute some actions once it happends - script: catch signal SIGSEGV command bt c end # quickly execute gdb command on running process, eg get backtrace from # thread 1 - cmd: $> gdb -ex 'thread 1' -ex 'bt' -p # script gdb for automating debugging sessions - script: run.gdb set pagination off break mmap command info reg rdi rsi rdx bt c end #initial drop c - cmd: $> gdb -p -x ./run.gdb --batch &> run.log # workaround command + finish bug # issue: when using finish in a command block, actions after finish will not # be executed - script: define handler bt finish info reg rax end command handler end -------------------------------------------------------------------------------- vim:ft=help:sts=2:et:tw=80:cc=80:fo+=t