aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gdb.md
diff options
context:
space:
mode:
Diffstat (limited to 'src/gdb.md')
-rw-r--r--src/gdb.md162
1 files changed, 0 insertions, 162 deletions
diff --git a/src/gdb.md b/src/gdb.md
deleted file mode 100644
index 7a43ca1..0000000
--- a/src/gdb.md
+++ /dev/null
@@ -1,162 +0,0 @@
-# gdb(1)
-
-# CLI
-
-```markdown
- gdb [opts] [prg [-c coredump | -p pid]]
- gdb [opts] --args prg <prg-args>
- opts:
- -p <pid> attach to pid
- -c <coredump> use <coredump>
- -x <file> execute script <file> before prompt
- -ex <cmd> execute command <cmd> before prompt
- --tty <tty> set I/O tty for debugee
-```
-
-# Interactive usage
-
-```markdown
- tty <tty>
- Set <tty> as tty for debugee.
- Make sure nobody reads from target tty, easiest is to spawn a shell
- and run following in target tty:
- > while true; do sleep 1024; done
-
- set follow-fork-mode <child | parent>
- Specify which process to follow when debuggee makes a fork(2)
- syscall.
-
- sharedlibrary [<regex>]
- Load symbols of shared libs loaded by debugee. Optionally use <regex>
- to filter libs for symbol loading.
-
- break [-qualified] <sym> thread <tnum>
- Set a breakpoint only for a specific thread.
- -qualified: Tred <sym> as fully qualified symbol (quiet handy to set
- breakpoints on C symbols in C++ contexts)
-
- rbreak <regex>
- Set breakpoints matching <regex>, where matching internally is done
- on: .*<regex>.*
-
- command [<bp_list>]
- Define commands to run after breakpoint hit. If <bp_list> is not
- specified attach command to last created breakpoint. Command block
- terminated with 'end' token.
-
- <bp_list>: Space separates list, eg 'command 2 5-8' to run command
- for breakpoints: 2,5,6,7,8.
-
- info functions [<regex>]
- List functions matching <regex>. List all functions if no <regex>
- provided.
-
- info variables [<regex>]
- List variables matching <regex>. List all variables if no <regex>
- provided.
-
- info handle [<signal>]
- Print how to handle <signal>. If no <signal> specified print for all
- signals.
-
- handle <signal> <action>
- Configure how gdb handles <signal> sent to debugee.
- <action>:
- stop/nostop Catch signal in gdb and break.
- print/noprint Print message when gdb catches signal.
- pass/nopass Pass signal down to debugee.
-
- catch signal <signal>
- Create a catchpoint for <signal>.
-```
-
-# User commands (macros)
-
-Gdb allows to create & document user commands as follows:
-```markdown
- define <cmd>
- # cmds
- end
-
- document <cmd>
- # docu
- end
-```
-
-To get all user commands or documentations one can use:
-```markdown
- help user-defined
- help <cmd>
-```
-
-# Hooks
-
-Gdb allows to create two types of command `hooks`
-- `hook-` will be run before `<cmd>`
-- `hookpost-` will be run after `<cmd>`
-```markdown
- define hook-<cmd>
- # cmds
- end
-
- define hookpost-<cmd>
- # cmds
- end
-```
-
-# Examples
-
-## Catch SIGSEGV and execute commands
-This creates a `catchpoint` for the `SIGSEGV` signal and attached the `command`
-to it.
-```markdown
- catch signal SIGSEGV
- command
- bt
- c
- end
-```
-
-## Run `backtrace` on thread 1 (batch mode)
-```markdown
- gdb --batch -ex 'thread 1' -ex 'bt' -p <pid>
-```
-
-## Script gdb for automating debugging sessions
-To script gdb add commands into a file and pass it to gdb via `-x`.
-For example create `run.gdb`:
-```markdown
- set pagination off
-
- break mmap
- command
- info reg rdi rsi rdx
- bt
- c
- end
-
- #initial drop
- c
-```
-This script can be used as:
-```markdown
- gdb --batch -x ./run.gdb -p <pid>
-```
-
-# Know Bugs
-
-## Workaround `command + finish` bug
-When using `finish` inside a `command` block, commands after `finish` are not
-executed. To workaround that bug one can create a wrapper function which calls
-`finish`.
-```markdown
- define handler
- bt
- finish
- info reg rax
- end
-
- command
- handler
- end
-```