mirror of https://github.com/pwndbg/pwndbg.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
6.4 KiB
Markdown
46 lines
6.4 KiB
Markdown
# GDB vs LLDB
|
|
|
|
For users who are migrating from one debugger to another, here is a table comparison of some of the most common actions and how to do them in GDB and LLDB. Note that both debuggers offer shorthands for typing these commands.
|
|
|
|
| **Functionality** | **GDB Command** | **LLDB Command** |
|
|
|-----------------------------------------------|----------------------------------------|-------------------------------------------------------------|
|
|
| **Start Debugging Program** | `gdb ./your-program` | `lldb ./your-program` |
|
|
| **Set a Breakpoint** | `break <function-name>` | `breakpoint set --name <function-name>` |
|
|
| **Set Breakpoint on Address** | `break *<address>` | `breakpoint set --address <address>` |
|
|
| **Set Breakpoint at Line** | `break <filename>:<line-number>` | `breakpoint set --file <filename> --line <line-number>` |
|
|
| **Set Hardware Breakpoint** | `hbreak <function-name>` | `breakpoint set --hardware --name <function-name>` |
|
|
| **Set Hardware Breakpoint at Memory** | `hbreak *<memory-address>` | `breakpoint set --hardware --address <memory-address>` |
|
|
| **List All Breakpoints** | `info breakpoints` | `breakpoint list` |
|
|
| **Delete Breakpoints** | `delete <breakpoint-number>` | `breakpoint delete <breakpoint-number>` |
|
|
| **Set Watchpoint** | `watch <variable>` | `watchpoint set variable <variable>` |
|
|
| **Set Conditional Breakpoint** | `break <function-name> if <condition>` | `breakpoint set --condition "<condition>"` |
|
|
| **Continue Execution** | `continue` | `process continue` |
|
|
| **Next Instruction** | `next` | `thread step-over` |
|
|
| **Step into a Function** | `step` | `thread step-in` |
|
|
| **Step out of a Function** | `finish` | `thread step-out` |
|
|
| **Print Threads** | `info threads` | `thread list` |
|
|
| **Select Thread** | `thread <thread-id>` | `thread select <thread-id>` |
|
|
| **Print Register Values** | `info registers` | `register read -a` |
|
|
| **Print a Variable** | `print <variable>` | `print <variable>` |
|
|
| **Display Variable on Every Stop** | `display <variable>` | `expression --watch <variable>` |
|
|
| **Examine Memory (Hex)** | `x/<num>x <memory-address>` | `memory read --format x --count <num> <memory-address>` |
|
|
| **Examine Memory (Integer)** | `x/<num>d <memory-address>` | `memory read --format d --count <num> <memory-address>` |
|
|
| **Inspect Stack Trace** | `backtrace` | `thread backtrace` |
|
|
| **Change Register Value** | `set $<register-name> = <value>` | `register write <register-name> <value>` |
|
|
| **Check Program Status** | `info locals` | `frame variable` |
|
|
| **Check Program Info** | `info functions` | `image lookup --functions` |
|
|
| **Show Disassembly of Function** | `disas <function-name>` | `disassemble <function-name>` |
|
|
| **Memory Dump (Hex)** | `x/<num>xh <memory-address>` | `memory read --format x --count <num> <memory-address>` |
|
|
| **Memory Dump (Bytes)** | `x/<num>bx <memory-address>` | `memory read --format b --count <num> <memory-address>` |
|
|
| **Show Process Information** | `info process` | `process status` |
|
|
| **Quit Debugging** | `quit` | `quit` |
|
|
| **Run Program with Arguments** | `run <arg1> <arg2> ...` | `process launch -- <arg1> <arg2> ...` |
|
|
| **Show Current Function** | `info frame` | `frame info` |
|
|
| **Set Sysroot** | `set sysroot <path-to-sysroot>` | `settings set target.sysroot <path-to-sysroot>` |
|
|
| **Set Source Directory** | `directory <path-to-source-directory>` | `settings set target.source-map <remote-path> <local-path>` |
|
|
| **Set Architecture** | `set architecture <arch>` | `target create --arch <arch> <executable-file>` |
|
|
| **Show Settings** | `show <setting-name>` | `settings show <setting-name>` |
|
|
| **Set File for Debugging** | `file <executable-file>` | `target create <executable-file>` |
|
|
| **Start the Program at the First Instruction**| `starti` | `process launch --stop-at-entry` |
|
|
| **Enable ASLR** | `set disable-randomization off` | `settings set target.disable-aslr false` |
|