GDB to LLDB command map ======================= Below is a table of GDB commands with their LLDB counterparts. The built in GDB-compatibility aliases in LLDB are also listed. The full lldb command names are often long, but any unique short form can be used. Instead of "**breakpoint set**", "**br se**" is also acceptable. * `Execution Commands`_ * `Breakpoint Commands`_ * `Watchpoint Commands`_ * `Examining Variables`_ * `Evaluating Expressions`_ * `Examining Thread State`_ * `Executable and Shared Library Query Commands`_ * `Miscellaneous`_ Execution Commands ------------------ Launch a process no arguments ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) run (gdb) r .. code-block:: shell (lldb) process launch (lldb) run (lldb) r Launch a process with arguments ```` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) run (gdb) r .. code-block:: shell (lldb) process launch -- (lldb) run (lldb) r Launch process ``a.out`` with arguments ``1 2 3`` by passing the args to the debugger ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell % gdb --args a.out 1 2 3 (gdb) run ... (gdb) run ... .. code-block:: shell % lldb -- a.out 1 2 3 (lldb) run ... (lldb) run ... Launch process a.out with arguments ``1 2 3`` by setting the args in the debugger ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) set args 1 2 3 (gdb) run ... (gdb) run ... .. code-block:: shell (lldb) settings set target.run-args 1 2 3 (lldb) run ... (lldb) run ... Launch a process with arguments in new terminal window (macOS only) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) process launch --tty -- (lldb) pro la -t -- Launch a process with arguments ```` in existing terminal ``/dev/ttys006`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) process launch --tty=/dev/ttys006 -- (lldb) pro la -t/dev/ttys006 -- Set environment variables for process before launching ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) set env DEBUG 1 .. code-block:: shell (lldb) settings set target.env-vars DEBUG=1 (lldb) set se target.env-vars DEBUG=1 (lldb) env DEBUG=1 Unset environment variables for process before launching ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) unset env DEBUG .. code-block:: shell (lldb) settings remove target.env-vars DEBUG (lldb) set rem target.env-vars DEBUG Show the arguments that will be or were passed to the program when run ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) show args Argument list to give program being debugged when it is started is "1 2 3". .. code-block:: shell (lldb) settings show target.run-args target.run-args (array of strings) = [0]: "1" [1]: "2" [2]: "3" Set environment variables for process and launch process in one command ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) process launch -E DEBUG=1 Attach to the process with process ID 123 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) attach 123 .. code-block:: shell (lldb) process attach --pid 123 (lldb) attach -p 123 Attach to the process named ``a.out`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) attach a.out .. code-block:: shell (lldb) process attach --name a.out (lldb) pro at -n a.out Wait for a process named ``a.out`` to launch and attach ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) attach -waitfor a.out .. code-block:: shell (lldb) process attach --name a.out --waitfor (lldb) pro at -n a.out -w Attach to a remote gdb protocol server running on system ``eorgadd``, port ``8000`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) target remote eorgadd:8000 .. code-block:: shell (lldb) gdb-remote eorgadd:8000 Attach to a remote gdb protocol server running on the local system, port ``8000`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) target remote localhost:8000 .. code-block:: shell (lldb) gdb-remote 8000 Attach to a Darwin kernel in kdp mode on system ``eorgadd`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) kdp-reattach eorgadd .. code-block:: shell (lldb) kdp-remote eorgadd Do a source level single step in the currently selected thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) step (gdb) s .. code-block:: shell (lldb) thread step-in (lldb) step (lldb) s Do a source level single step over in the currently selected thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) next (gdb) n .. code-block:: shell (lldb) thread step-over (lldb) next (lldb) n Do an instruction level single step in the currently selected thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) stepi (gdb) si .. code-block:: shell (lldb) thread step-inst (lldb) si Do an instruction level single step over in the currently selected thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) nexti (gdb) ni .. code-block:: shell (lldb) thread step-inst-over (lldb) ni Step out of the currently selected frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) finish .. code-block:: shell (lldb) thread step-out (lldb) finish Return immediately from the currently selected frame, with an optional return value ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) return .. code-block:: shell (lldb) thread return Backtrace and disassemble every time you stop ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) target stop-hook add Enter your stop hook command(s). Type 'DONE' to end. > bt > disassemble --pc > DONE Stop hook #1 added. Run until we hit line 12 or control leaves the current function ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) until 12 .. code-block:: shell (lldb) thread until 12 Show the current frame and source line ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) frame .. code-block:: shell (lldb) frame select (lldb) f (lldb) process status Breakpoint Commands ------------------- Set a breakpoint at all functions named main ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) break main .. code-block:: shell (lldb) breakpoint set --name main (lldb) br s -n main (lldb) b main Set a breakpoint in file ``test.c`` at line ``12`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) break test.c:12 .. code-block:: shell (lldb) breakpoint set --file test.c --line 12 (lldb) br s -f test.c -l 12 (lldb) b test.c:12 Set a breakpoint at all C++ methods whose basename is ``main`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) break main (Hope that there are no C functions named main) .. code-block:: shell (lldb) breakpoint set --method main (lldb) br s -M main Set a breakpoint at an Objective-C function ``-[NSString stringWithFormat:]`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) break -[NSString stringWithFormat:] .. code-block:: shell (lldb) breakpoint set --name "-[NSString stringWithFormat:]" (lldb) b -[NSString stringWithFormat:] Set a breakpoint at all Objective-C methods whose selector is ``count`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) break count (Hope that there are no C or C++ functions named count) .. code-block:: shell (lldb) breakpoint set --selector count (lldb) br s -S count Set a breakpoint by regular expression on function name ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) rbreak regular-expression .. code-block:: shell (lldb) breakpoint set --func-regex regular-expression (lldb) br s -r regular-expression Ensure that breakpoints by file and line work for ``#include .c/.cpp/.m`` files ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) b foo.c:12 .. code-block:: shell (lldb) settings set target.inline-breakpoint-strategy always (lldb) br s -f foo.c -l 12 Set a breakpoint by regular expression on source file contents ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) shell grep -e -n pattern source-file (gdb) break source-file:CopyLineNumbers .. code-block:: shell (lldb) breakpoint set --source-pattern regular-expression --file SourceFile (lldb) br s -p regular-expression -f file Set a conditional breakpoint ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) break foo if strcmp(y,"hello") == 0 .. code-block:: shell (lldb) breakpoint set --name foo --condition '(int)strcmp(y,"hello") == 0' (lldb) br s -n foo -c '(int)strcmp(y,"hello") == 0' List all breakpoints ~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info break .. code-block:: shell (lldb) breakpoint list (lldb) br l Delete a breakpoint ~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) delete 1 .. code-block:: shell (lldb) breakpoint delete 1 (lldb) br del 1 Disable a breakpoint ~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) disable 1 .. code-block:: shell (lldb) breakpoint disable 1 (lldb) br dis 1 Enable a breakpoint ~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) enable 1 .. code-block:: shell (lldb) breakpoint enable 1 (lldb) br en 1 Watchpoint Commands ------------------- Set a watchpoint on a variable when it is written to ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) watch global_var .. code-block:: shell (lldb) watchpoint set variable global_var (lldb) wa s v global_var Set a watchpoint on a memory location when it is written into ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The size of the region to watch for defaults to the pointer size if no '-x byte_size' is specified. This command takes raw input, evaluated as an expression returning an unsigned integer pointing to the start of the region, after the '--' option terminator. .. code-block:: shell (gdb) watch -location g_char_ptr .. code-block:: shell (lldb) watchpoint set expression -- my_ptr (lldb) wa s e -- my_ptr Set a condition on a watchpoint ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) watch set var global (lldb) watchpoint modify -c '(global==5)' (lldb) c ... (lldb) bt * thread #1: tid = 0x1c03, 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16, stop reason = watchpoint 1 frame #0: 0x0000000100000ef5 a.out`modify + 21 at main.cpp:16 frame #1: 0x0000000100000eac a.out`main + 108 at main.cpp:25 frame #2: 0x00007fff8ac9c7e1 libdyld.dylib`start + 1 (lldb) frame var global (int32_t) global = 5 List all watchpoints ~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info break .. code-block:: shell (lldb) watchpoint list (lldb) watch l Delete a watchpoint ~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) delete 1 .. code-block:: shell (lldb) watchpoint delete 1 (lldb) watch del 1 Examining Variables ------------------- Show the arguments and local variables for the current frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info args (gdb) info locals .. code-block:: shell (lldb) frame variable (lldb) fr v Show the local variables for the current frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info locals .. code-block:: shell (lldb) frame variable --no-args (lldb) fr v -a Show the contents of local variable ``bar`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) p bar .. code-block:: shell (lldb) frame variable bar (lldb) fr v bar (lldb) p bar Show the contents of local variable ``bar`` formatted as hex ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) p/x bar .. code-block:: shell (lldb) frame variable --format x bar (lldb) fr v -f x bar Show the contents of global variable ``baz`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) p baz .. code-block:: shell (lldb) target variable baz (lldb) ta v baz Show the global/static variables defined in the current source file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) target variable (lldb) ta v Display the variables ``argc`` and ``argv`` every time you stop ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) display argc (gdb) display argv .. code-block:: shell (lldb) target stop-hook add --one-liner "frame variable argc argv" (lldb) ta st a -o "fr v argc argv" (lldb) display argc (lldb) display argv Display the variables ``argc`` and ``argv`` only when you stop in the function named ``main`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) target stop-hook add --name main --one-liner "frame variable argc argv" (lldb) ta st a -n main -o "fr v argc argv" Display the variable ``*this`` only when you stop in c class named ``MyClass`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) target stop-hook add --classname MyClass --one-liner "frame variable *this" (lldb) ta st a -c MyClass -o "fr v *this" Print an array of integers in memory, assuming we have a pointer like ``int *ptr`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) p *ptr@10 .. code-block:: shell (lldb) parray 10 ptr Evaluating Expressions ---------------------- Evaluating a generalized expression in the current frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) print (int) printf ("Print nine: %d.", 4 + 5) or if you don't want to see void returns: .. code-block:: shell (gdb) call (int) printf ("Print nine: %d.", 4 + 5) .. code-block:: shell (lldb) expr (int) printf ("Print nine: %d.", 4 + 5) or using the print alias: .. code-block:: shell (lldb) print (int) printf ("Print nine: %d.", 4 + 5) Creating and assigning a value to a convenience variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) set $foo = 5 (gdb) set variable $foo = 5 or using the print command .. code-block:: shell (gdb) print $foo = 5 or using the call command .. code-block:: shell (gdb) call $foo = 5 and if you want to specify the type of the variable: .. code-block:: shell (gdb) set $foo = (unsigned int) 5 In lldb you evaluate a variable declaration expression as you would write it in C: .. code-block:: shell (lldb) expr unsigned int $foo = 5 Printing the ObjC "description" of an object ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) po [SomeClass returnAnObject] .. code-block:: shell (lldb) expr -o -- [SomeClass returnAnObject] or using the po alias: .. code-block:: shell (lldb) po [SomeClass returnAnObject] Print the dynamic type of the result of an expression ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) set print object 1 (gdb) p someCPPObjectPtrOrReference (Only works for C++ objects) .. code-block:: shell (lldb) expr -d 1 -- [SomeClass returnAnObject] (lldb) expr -d 1 -- someCPPObjectPtrOrReference or set dynamic type printing to be the default: .. code-block:: shell (lldb) settings set target.prefer-dynamic run-target Call a function so you can stop at a breakpoint in it ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) set unwindonsignal 0 (gdb) p function_with_a_breakpoint() .. code-block:: shell (lldb) expr -i 0 -- function_with_a_breakpoint() Call a function that crashes, then stop when it does ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) set unwindonsignal 0 (gdb) p function_which_crashes() .. code-block:: shell (lldb) expr -u 0 -- function_which_crashes() Examining Thread State ---------------------- List the threads in your program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info threads .. code-block:: shell (lldb) thread list Select thread ``1`` as the default thread for subsequent commands ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) thread 1 .. code-block:: shell (lldb) thread select 1 (lldb) t 1 Show the stack backtrace for the current thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) bt .. code-block:: shell (lldb) thread backtrace (lldb) bt Show the stack backtraces for all threads ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) thread apply all bt .. code-block:: shell (lldb) thread backtrace all (lldb) bt all Backtrace the first five frames of the current thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) bt 5 .. code-block:: shell (lldb) thread backtrace -c 5 (lldb) bt 5 Select a different stack frame by index for the current thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) frame 12 .. code-block:: shell (lldb) frame select 12 (lldb) fr s 12 (lldb) f 12 List information about the currently selected frame in the current thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) frame info Select the stack frame that called the current stack frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) up .. code-block:: shell (lldb) up (lldb) frame select --relative=1 Select the stack frame that is called by the current stack frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) down .. code-block:: shell (lldb) down (lldb) frame select --relative=-1 (lldb) fr s -r-1 Select a different stack frame using a relative offset ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) up 2 (gdb) down 3 .. code-block:: shell (lldb) frame select --relative 2 (lldb) fr s -r2 (lldb) frame select --relative -3 (lldb) fr s -r-3 show the general purpose registers for the current thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info registers .. code-block:: shell (lldb) register read Write a new decimal value ``123`` to the current thread register ``rax`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) p $rax = 123 .. code-block:: shell (lldb) register write rax 123 Skip 8 bytes ahead of the current program counter (instruction pointer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Note that we use backticks to evaluate an expression and insert the scalar result in LLDB. .. code-block:: shell (gdb) jump *$pc+8 .. code-block:: shell (lldb) register write pc `$pc+8` Show the general purpose registers for the current thread formatted as signed decimal ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LLDB tries to use the same format characters as printf(3) when possible. Type "help format" to see the full list of format specifiers. .. code-block:: shell (lldb) register read --format i (lldb) re r -f i LLDB now supports the GDB shorthand format syntax but there can't be space after the command: .. code-block:: shell (lldb) register read/d Show all registers in all register sets for the current thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info all-registers .. code-block:: shell (lldb) register read --all (lldb) re r -a Show the values for the registers named ``rax``, ``rsp`` and ``rbp`` in the current thread ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info all-registers rax rsp rbp .. code-block:: shell (lldb) register read rax rsp rbp Show the values for the register named ``rax`` in the current thread formatted as binary ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) p/t $rax .. code-block:: shell (lldb) register read --format binary rax (lldb) re r -f b rax LLDB now supports the GDB shorthand format syntax but there can't be space after the command .. code-block:: shell (lldb) register read/t rax (lldb) p/t $rax Read memory from address ``0xbffff3c0`` and show 4 hex ``uint32_t`` values ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) x/4xw 0xbffff3c0 .. code-block:: shell (lldb) memory read --size 4 --format x --count 4 0xbffff3c0 (lldb) me r -s4 -fx -c4 0xbffff3c0 (lldb) x -s4 -fx -c4 0xbffff3c0 LLDB now supports the GDB shorthand format syntax but there can't be space after the command: .. code-block:: shell (lldb) memory read/4xw 0xbffff3c0 (lldb) x/4xw 0xbffff3c0 (lldb) memory read --gdb-format 4xw 0xbffff3c0 Read memory starting at the expression ``argv[0]`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) x argv[0] .. code-block:: shell (lldb) memory read `argv[0]` NOTE: any command can inline a scalar expression result (as long as the target is stopped) using backticks around any expression: .. code-block:: shell (lldb) memory read --size `sizeof(int)` `argv[0]` Read ``512`` bytes of memory from address ``0xbffff3c0`` and save the results to a local file as text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) set logging on (gdb) set logging file /tmp/mem.txt (gdb) x/512bx 0xbffff3c0 (gdb) set logging off .. code-block:: shell (lldb) memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0 (lldb) me r -o/tmp/mem.txt -c512 0xbffff3c0 (lldb) x/512bx -o/tmp/mem.txt 0xbffff3c0 Save binary memory data starting at ``0x1000`` and ending at ``0x2000`` to a file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) dump memory /tmp/mem.bin 0x1000 0x2000 .. code-block:: shell (lldb) memory read --outfile /tmp/mem.bin --binary 0x1000 0x2000 (lldb) me r -o /tmp/mem.bin -b 0x1000 0x2000 Get information about a specific heap allocation (macOS only) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info malloc 0x10010d680 .. code-block:: shell (lldb) command script import lldb.macosx.heap (lldb) process launch --environment MallocStackLogging=1 -- [ARGS] (lldb) malloc_info --stack-history 0x10010d680 Get information about a specific heap allocation and cast the result to any dynamic type that can be deduced (macOS only) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) command script import lldb.macosx.heap (lldb) malloc_info --type 0x10010d680 Find all heap blocks that contain a pointer specified by an expression ``EXPR`` (macOS only) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) command script import lldb.macosx.heap (lldb) ptr_refs EXPR Find all heap blocks that contain a C string anywhere in the block (macOS only) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) command script import lldb.macosx.heap (lldb) cstr_refs CSTRING Disassemble the current function for the current frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) disassemble .. code-block:: shell (lldb) disassemble --frame (lldb) di -f Disassemble any functions named main ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) disassemble main .. code-block:: shell (lldb) disassemble --name main (lldb) di -n main Disassemble an address range ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) disassemble 0x1eb8 0x1ec3 .. code-block:: shell (lldb) disassemble --start-address 0x1eb8 --end-address 0x1ec3 (lldb) di -s 0x1eb8 -e 0x1ec3 Disassemble ``20`` instructions from a given address ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) x/20i 0x1eb8 .. code-block:: shell (lldb) disassemble --start-address 0x1eb8 --count 20 (lldb) di -s 0x1eb8 -c 20 Show mixed source and disassembly for the current function for the current frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) disassemble --frame --mixed (lldb) di -f -m Disassemble the current function for the current frame and show the opcode bytes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) disassemble --frame --bytes (lldb) di -f -b Disassemble the current source line for the current frame ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) disassemble --line (lldb) di -l Executable and Shared Library Query Commands -------------------------------------------- List the main executable and all dependent shared libraries ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info shared .. code-block:: shell (lldb) image list Look up information for a raw address in the executable or any shared libraries ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info symbol 0x1ec4 .. code-block:: shell (lldb) image lookup --address 0x1ec4 (lldb) im loo -a 0x1ec4 Look up functions matching a regular expression in a binary ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info function This one finds debug symbols: .. code-block:: shell (lldb) image lookup -r -n This one finds non-debug symbols: .. code-block:: shell (lldb) image lookup -r -s Provide a list of binaries as arguments to limit the search. Find full source line information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) info line 0x1ec4 This one is a bit messy at present. Do: .. code-block:: shell (lldb) image lookup -v --address 0x1ec4 and look for the LineEntry line, which will have the full source path and line range information. Look up information for an address in ``a.out`` only ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) image lookup --address 0x1ec4 a.out (lldb) im loo -a 0x1ec4 a.out Look up information for for a type ``Point`` by name ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) ptype Point .. code-block:: shell (lldb) image lookup --type Point (lldb) im loo -t Point Dump all sections from the main executable and any shared libraries ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) maintenance info sections .. code-block:: shell (lldb) image dump sections Dump all sections in the ``a.out`` module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) image dump sections a.out Dump all symbols from the main executable and any shared libraries ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) image dump symtab Dump all symbols in ``a.out`` and ``liba.so`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (lldb) image dump symtab a.out liba.so Miscellaneous ------------- Search command help for a keyword ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) apropos keyword .. code-block:: shell (lldb) apropos keyword Echo text to the screen ~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: shell (gdb) echo Here is some text\n .. code-block:: shell (lldb) script print "Here is some text" Remap source file pathnames for the debug session ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If your source files are no longer located in the same location as when the program was built (for example, if the program was built on a different computer) you need to tell the debugger how to find the sources at their local file path instead of the build system's file path. .. code-block:: shell (gdb) set pathname-substitutions /buildbot/path /my/path .. code-block:: shell (lldb) settings set target.source-map /buildbot/path /my/path Supply a catchall directory to search for source files in. .. code-block:: shell (gdb) directory /my/path