The LLDB Debugger

# LLDB to GDB Command Map

Below is a table of LLDB commands with the GDB counterparts. The built in GDB compatability aliases in GDB are also listed.

# Execution Commands

LLDB | GDB
Launch a process no arguments.
(lldb) process launch (lldb) run (lldb) r | (gdb) run (gdb) r
Launch a process with arguments `<args>`.
(lldb) process launch -- <args> (lldb) run -- <args> (lldb) r <args> | (gdb) run <args> (gdb) r <args>
Launch a process for with arguments `a.out 1 2 3` without having to supply the args every time.
% lldb -- a.out 1 2 3 (lldb) run ... (lldb) run ... | % gdb --args a.out 1 2 3 (gdb) run ... (gdb) run ...
Launch a process with arguments in new terminal window (Mac OS X only).
(lldb) process launch --tty -- <args> (lldb) process launch -t -- <args> |
Launch a process with arguments in existing terminal <cope>/dev/ttys006 (Mac OS X only).
(lldb) process launch --tty=/dev/ttys006 -- <args> (lldb) process launch -t/dev/ttys006 -- <args> |
Attach to a process with process ID 123.
(lldb) process attach --pid 123 (lldb) attach -p 123 | (gdb) attach 123
Attach to a process named "a.out".
(lldb) process attach --name a.out (lldb) process attach -n a.out | (gdb) attach a.out
Wait for a process named "a.out" to launch and attach.
(lldb) process attach --name a.out --waitfor (lldb) process attach -n a.out -w | (gdb) attach -waitfor a.out
Do a source level single step in the currently selected thread.
(lldb) thread step-in (lldb) step (lldb) s | (gdb) step (gdb) s
Do a source level single step over in the currently selected thread.
(lldb) thread step-over (lldb) next (lldb) n | (gdb) next (gdb) n
Do an instruction level single step in the currently selected thread.
(lldb) thread step-inst (lldb) si | (gdb) stepi (gdb) si
Do an instruction level single step over in the currently selected thread.
(lldb) thread step-inst-over | (gdb) nexti (gdb) ni
Step out of the currently selected frame.
(lldb) thread step-out (lldb) finish | (gdb) finish
Display a the variable "argc" and "argv" everytime you stop.
(lldb) target stop-hook add --one-liner "frame variable argc argv" | (gdb) display argc (gdb) display argv
Display a the variable "argc" and "argv" only when you stop in the function named main.
(lldb) target stop-hook add --name main --one-liner "frame variable argc argv"
Display the variable "*this" only when you stop in c class named MyClass.
(lldb) target stop-hook add --classname MyClass --one-liner "frame variable *this"
Backtrace and disassemble every time you stop.
(lldb) target stop-hook add" Enter your stop hook command(s). Type 'DONE' to end. > bt > disassemble --pc > DONE Stop hook #1 added.

# Breakpoint Commands

LLDB | GDB
Set a breakpoint at all functions named main.
(lldb) breakpoint set --name main (lldb) breakpoint set -n main (lldb) b main | (lldb) break main
Set a breakpoint in file test.c at line 12.
(lldb) breakpoint set --file test.c --line 12 (lldb) breakpoint set -f test.c -l 12 (lldb) b test.c:12 | (lldb) break test.c:12
Set a breakpoint at all C++ methods whose basename is main.
(lldb) breakpoint set --method main (lldb) breakpoint set -M main | (lldb) break main (Hope that there are no C funtions named main).
Set a breakpoint at all Objective C methods whose selector is count.
(lldb) breakpoint set --selector count (lldb) breakpoint set -S count | (lldb) break count (Hope that there are no C or C++ funtions named count).

# Examining Thread State

LLDB | GDB
Show the arguments and local variables for the current frame.
(lldb) frame variable | (gdb) info args and (gdb) info locals
Show the stack backtrace for the current thread.
(lldb) thread backtrace (lldb) bt | (gdb) bt
Show the stack backtraces for all threads.
(lldb) thread backtrace all (lldb) bt all | (gdb) thread apply all bt
Select a different stack frame by index for the current thread.
(lldb) frame select 12 | (gdb) frame 12
Select the stack frame that called the current stack frame.
(lldb) up (lldb) frame select --relative=1 | (gdb) up
Select the stack frame that is called by the current stack frame.
(lldb) down (lldb) frame select --relative=-1 (lldb) frame select -r-1 | (gdb) down
Select a different stack frame using a relative offset.
(lldb) frame select --relative 2 (lldb) frame select -r2 (lldb) frame select --relative -3 (lldb) frame select -r-3 | (gdb) up 2 (gdb) down 3
Show the general purpose registers for the current thread.
(lldb) register read | (gdb) info registers
Show the general purpose registers for the current thread formatted as unsigned decimal. LLDB tries to use the same format characters as printf when possible.
(lldb) register read --format i (lldb) register read -f i |
Show all registers in all register sets for the current thread.
(lldb) register read --all (lldb) register read -a | (gdb) info all-registers
Show the values for the registers named "rax", "rsp" and "rbp" in the current thread.
(lldb) register read rax rsp rbp | (gdb) info all-registers rax rsp rbp
Show the values for the register named "rax" in the current thread formatted as binary.
(lldb) register read --format binary rax (lldb) register read -f b rax | (gdb) p/t $rax
Read memory from address 0xbffff3c0 and show 4 hex uint32_t values.
(lldb) memory read --size 4 --format x --count 4 0xbffff3c0 (lldb) memory read -s4 -fx -c4 0xbffff3c0 (lldb) x -s4 -fx -c4 0xbffff3c0 | (gdb) x/4xw 0xbffff3c0
Read 512 bytes of memory from address 0xbffff3c0 and save results to a local file as text.
(lldb) memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0 (lldb) memory read -o/tmp/mem.txt -c512 0xbffff3c0 | (gdb) set logging on (gdb) set logging file /tmp/mem.txt (gdb) x/512bx 0xbffff3c0 (gdb) set logging off
Save binary memory data starting at 0x1000 and ending at 0x2000 to a file.
(lldb) memory read --outfile /tmp/mem.bin --binary 0x1000 0x1200 (lldb) memory read -o /tmp/mem.bin -b 0x1000 0x1200
Disassemble the current function for the current frame.
(lldb) disassemble --frame (lldb) disassemble -f | (gdb) disassemble
Disassemble any functions named main.
(lldb) disassemble --name main (lldb) disassemble -n main | (gdb) disassemble main
Disassemble an address range.
(lldb) disassemble --start-address 0x1eb8 --end-address 0x1ec3 (lldb) disassemble -s 0x1eb8 -e 0x1ec3 | (gdb) disassemble 0x1eb8 0x1ec3
Disassemble 20 instructions from a given address.
(lldb) disassemble --start-address 0x1eb8 --count 20 (lldb) disassemble -s 0x1eb8 -c 20 | (gdb) x/20i 0x1eb8
Show mixed source and disassembly for the current function for the current frame.
(lldb) disassemble --frame --mixed (lldb) disassemble -f -m | n/a
Disassemble the current function for the current frame and show the opcode bytes.
(lldb) disassemble --frame --bytes (lldb) disassemble -f -b | n/a
Disassemble the current source line for the current frame.
(lldb) disassemble --line (lldb) disassemble -l | n/a

# Executable and Shared Library Query Commands

LLDB | GDB
List the main executable and all dependent shared libraries.
(lldb) image list | (gdb) info shared
Lookup information for a raw address in the executable or any shared libraries.
(lldb) image lookup --address 0x1ec4 (lldb) image lookup -a 0x1ec4 | (gdb) info symbol 0x1ec4
Lookup information for an address in a.out only.
(lldb) image lookup --address 0x1ec4 a.out (lldb) image lookup -a 0x1ec4 a.out |
Lookup information for for a type `Point` by name.
(lldb) image lookup --type Point (lldb) image lookup -t Point | (lldb) ptype Point
Dump all sections from the main executable and any shared libraries.
(lldb) image dump sections | (gdb) maintenance info sections
Dump all sections in the a.out module.
(lldb) image dump sections a.out |
Dump all symbols from the main executable and any shared libraries.
(lldb) image dump symtab |
Dump all symbols in a.out and liba.so.
(lldb) image dump symtab a.out liba.so |