2019-11-21 06:53:37 +08:00
|
|
|
|
:orphan:
|
|
|
|
|
|
|
|
|
|
lldb -- The Debugger
|
|
|
|
|
====================
|
|
|
|
|
|
|
|
|
|
.. program:: lldb
|
|
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
| :program:`lldb` [*options*] *executable*
|
|
|
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
|
-----------
|
|
|
|
|
|
2020-01-14 01:28:54 +08:00
|
|
|
|
:program:`lldb` is a next generation, high-performance debugger. It is built as
|
|
|
|
|
a set of reusable components which highly leverage existing libraries in the
|
|
|
|
|
larger LLVM Project, such as the Clang expression parser and LLVM disassembler.
|
|
|
|
|
|
|
|
|
|
:program:`lldb` is the default debugger in Xcode on macOS and supports
|
|
|
|
|
debugging C, Objective-C and C++ on the desktop and iOS devices and simulator.
|
|
|
|
|
|
|
|
|
|
All of the code in the LLDB project is available under the Apache 2.0 License
|
|
|
|
|
with LLVM exceptions.
|
2019-11-21 06:53:37 +08:00
|
|
|
|
|
|
|
|
|
ATTACHING
|
|
|
|
|
---------
|
|
|
|
|
|
|
|
|
|
.. option:: --attach-name <name>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to attach to a process with the given name.
|
|
|
|
|
|
|
|
|
|
.. option:: --attach-pid <pid>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to attach to a process with the given pid.
|
|
|
|
|
|
|
|
|
|
.. option:: -n <value>
|
|
|
|
|
|
|
|
|
|
Alias for --attach-name
|
|
|
|
|
|
|
|
|
|
.. option:: -p <value>
|
|
|
|
|
|
|
|
|
|
Alias for --attach-pid
|
|
|
|
|
|
|
|
|
|
.. option:: --wait-for
|
|
|
|
|
|
|
|
|
|
Tells the debugger to wait for a process with the given pid or name to launch before attaching.
|
|
|
|
|
|
|
|
|
|
.. option:: -w
|
|
|
|
|
|
|
|
|
|
Alias for --wait-for
|
|
|
|
|
|
|
|
|
|
COMMANDS
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
.. option:: --batch
|
|
|
|
|
|
|
|
|
|
Tells the debugger to run the commands from -s, -S, -o & -O, and then quit.
|
|
|
|
|
|
|
|
|
|
.. option:: -b
|
|
|
|
|
|
|
|
|
|
Alias for --batch
|
|
|
|
|
|
|
|
|
|
.. option:: -K <value>
|
|
|
|
|
|
|
|
|
|
Alias for --source-on-crash
|
|
|
|
|
|
|
|
|
|
.. option:: -k <value>
|
|
|
|
|
|
|
|
|
|
Alias for --one-line-on-crash
|
|
|
|
|
|
|
|
|
|
.. option:: --local-lldbinit
|
|
|
|
|
|
|
|
|
|
Allow the debugger to parse the .lldbinit files in the current working directory, unless --no-lldbinit is passed.
|
|
|
|
|
|
|
|
|
|
.. option:: --no-lldbinit
|
|
|
|
|
|
|
|
|
|
Do not automatically parse any '.lldbinit' files.
|
|
|
|
|
|
|
|
|
|
.. option:: --one-line-before-file <command>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to execute this one-line lldb command before any file provided on the command line has been loaded.
|
|
|
|
|
|
|
|
|
|
.. option:: --one-line-on-crash <command>
|
|
|
|
|
|
|
|
|
|
When in batch mode, tells the debugger to run this one-line lldb command if the target crashes.
|
|
|
|
|
|
|
|
|
|
.. option:: --one-line <command>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to execute this one-line lldb command after any file provided on the command line has been loaded.
|
|
|
|
|
|
|
|
|
|
.. option:: -O <value>
|
|
|
|
|
|
|
|
|
|
Alias for --one-line-before-file
|
|
|
|
|
|
|
|
|
|
.. option:: -o <value>
|
|
|
|
|
|
|
|
|
|
Alias for --one-line
|
|
|
|
|
|
|
|
|
|
.. option:: -Q
|
|
|
|
|
|
|
|
|
|
Alias for --source-quietly
|
|
|
|
|
|
|
|
|
|
.. option:: --source-before-file <file>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to read in and execute the lldb commands in the given file, before any file has been loaded.
|
|
|
|
|
|
|
|
|
|
.. option:: --source-on-crash <file>
|
|
|
|
|
|
|
|
|
|
When in batch mode, tells the debugger to source this file of lldb commands if the target crashes.
|
|
|
|
|
|
|
|
|
|
.. option:: --source-quietly
|
|
|
|
|
|
|
|
|
|
Tells the debugger to execute this one-line lldb command before any file has been loaded.
|
|
|
|
|
|
|
|
|
|
.. option:: --source <file>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to read in and execute the lldb commands in the given file, after any file has been loaded.
|
|
|
|
|
|
|
|
|
|
.. option:: -S <value>
|
|
|
|
|
|
|
|
|
|
Alias for --source-before-file
|
|
|
|
|
|
|
|
|
|
.. option:: -s <value>
|
|
|
|
|
|
|
|
|
|
Alias for --source
|
|
|
|
|
|
|
|
|
|
.. option:: -x
|
|
|
|
|
|
|
|
|
|
Alias for --no-lldbinit
|
|
|
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
.. option:: --arch <architecture>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to use the specified architecture when starting and running the program.
|
|
|
|
|
|
|
|
|
|
.. option:: -a <value>
|
|
|
|
|
|
|
|
|
|
Alias for --arch
|
|
|
|
|
|
|
|
|
|
.. option:: --capture-path <filename>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to use the given filename for the reproducer.
|
|
|
|
|
|
|
|
|
|
.. option:: --capture
|
|
|
|
|
|
|
|
|
|
Tells the debugger to capture a reproducer.
|
|
|
|
|
|
|
|
|
|
.. option:: --core <filename>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to use the full path to <filename> as the core file.
|
|
|
|
|
|
|
|
|
|
.. option:: -c <value>
|
|
|
|
|
|
|
|
|
|
Alias for --core
|
|
|
|
|
|
|
|
|
|
.. option:: --debug
|
|
|
|
|
|
|
|
|
|
Tells the debugger to print out extra information for debugging itself.
|
|
|
|
|
|
|
|
|
|
.. option:: -d
|
|
|
|
|
|
|
|
|
|
Alias for --debug
|
|
|
|
|
|
|
|
|
|
.. option:: --editor
|
|
|
|
|
|
|
|
|
|
Tells the debugger to open source files using the host's "external editor" mechanism.
|
|
|
|
|
|
|
|
|
|
.. option:: -e
|
|
|
|
|
|
|
|
|
|
Alias for --editor
|
|
|
|
|
|
|
|
|
|
.. option:: --file <filename>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to use the file <filename> as the program to be debugged.
|
|
|
|
|
|
|
|
|
|
.. option:: -f <value>
|
|
|
|
|
|
|
|
|
|
Alias for --file
|
|
|
|
|
|
|
|
|
|
.. option:: --help
|
|
|
|
|
|
|
|
|
|
Prints out the usage information for the LLDB debugger.
|
|
|
|
|
|
|
|
|
|
.. option:: -h
|
|
|
|
|
|
|
|
|
|
Alias for --help
|
|
|
|
|
|
|
|
|
|
.. option:: --no-use-colors
|
|
|
|
|
|
|
|
|
|
Do not use colors.
|
|
|
|
|
|
|
|
|
|
.. option:: --replay <filename>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to replay a reproducer from <filename>.
|
|
|
|
|
|
|
|
|
|
.. option:: --version
|
|
|
|
|
|
|
|
|
|
Prints out the current version number of the LLDB debugger.
|
|
|
|
|
|
|
|
|
|
.. option:: -v
|
|
|
|
|
|
|
|
|
|
Alias for --version
|
|
|
|
|
|
|
|
|
|
.. option:: -X
|
|
|
|
|
|
|
|
|
|
Alias for --no-use-color
|
|
|
|
|
|
|
|
|
|
REPL
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
.. option:: -r=<flags>
|
|
|
|
|
|
|
|
|
|
Alias for --repl=<flags>
|
|
|
|
|
|
|
|
|
|
.. option:: --repl-language <language>
|
|
|
|
|
|
|
|
|
|
Chooses the language for the REPL.
|
|
|
|
|
|
|
|
|
|
.. option:: --repl=<flags>
|
|
|
|
|
|
|
|
|
|
Runs lldb in REPL mode with a stub process with the given flags.
|
|
|
|
|
|
|
|
|
|
.. option:: -R <value>
|
|
|
|
|
|
|
|
|
|
Alias for --repl-language
|
|
|
|
|
|
|
|
|
|
SCRIPTING
|
|
|
|
|
---------
|
|
|
|
|
|
|
|
|
|
.. option:: -l <value>
|
|
|
|
|
|
|
|
|
|
Alias for --script-language
|
|
|
|
|
|
|
|
|
|
.. option:: --python-path
|
|
|
|
|
|
|
|
|
|
Prints out the path to the lldb.py file for this version of lldb.
|
|
|
|
|
|
|
|
|
|
.. option:: -P
|
|
|
|
|
|
|
|
|
|
Alias for --python-path
|
|
|
|
|
|
|
|
|
|
.. option:: --script-language <language>
|
|
|
|
|
|
|
|
|
|
Tells the debugger to use the specified scripting language for user-defined scripts.
|
|
|
|
|
|
|
|
|
|
EXAMPLES
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
The debugger can be started in several modes.
|
|
|
|
|
|
2020-05-19 09:10:53 +08:00
|
|
|
|
Passing an executable as a positional argument prepares lldb to debug the given
|
|
|
|
|
executable. To disambiguate between arguments passed to lldb and arguments
|
|
|
|
|
passed to the debugged executable, arguments starting with a - must be passed
|
|
|
|
|
after --.
|
2019-11-21 06:53:37 +08:00
|
|
|
|
|
2020-05-19 09:10:53 +08:00
|
|
|
|
lldb --arch x86_64 /path/to/program program argument -- --arch arvm7
|
|
|
|
|
|
|
|
|
|
For convenience, passing the executable after -- is also supported.
|
|
|
|
|
|
|
|
|
|
lldb --arch x86_64 -- /path/to/program program argument --arch arvm7
|
2019-11-21 06:53:37 +08:00
|
|
|
|
|
|
|
|
|
Passing one of the attach options causes :program:`lldb` to immediately attach
|
|
|
|
|
to the given process.
|
|
|
|
|
|
|
|
|
|
lldb -p <pid>
|
|
|
|
|
lldb -n <process-name>
|
|
|
|
|
|
|
|
|
|
Passing --repl starts :program:`lldb` in REPL mode.
|
|
|
|
|
|
|
|
|
|
lldb -r
|
|
|
|
|
|
|
|
|
|
Passing --core causes :program:`lldb` to debug the core file.
|
|
|
|
|
|
|
|
|
|
lldb -c /path/to/core
|
|
|
|
|
|
|
|
|
|
Command options can be combined with these modes and cause :program:`lldb` to
|
|
|
|
|
run the specified commands before or after events, like loading the file or
|
|
|
|
|
crashing, in the order provided on the command line.
|
|
|
|
|
|
|
|
|
|
lldb -O 'settings set stop-disassembly-count 20' -o 'run' -o 'bt'
|
|
|
|
|
lldb -S /source/before/file -s /source/after/file
|
|
|
|
|
lldb -K /source/before/crash -k /source/after/crash
|
|
|
|
|
|
|
|
|
|
Note: In REPL mode no file is loaded, so commands specified to run after
|
|
|
|
|
loading the file (via -o or -s) will be ignored.
|
|
|
|
|
|
|
|
|
|
USING LLDB
|
|
|
|
|
----------
|
|
|
|
|
|
|
|
|
|
In :program:`lldb` there is a help command which can be used to find
|
|
|
|
|
descriptions and examples of all :program:`lldb` commands. To get help on
|
|
|
|
|
"breakpoint set" you would type "help breakpoint set".
|
|
|
|
|
|
|
|
|
|
There is also an apropos command which will search the help text of all
|
|
|
|
|
commands for a given term ‐‐ this is useful for locating a command by topic.
|
|
|
|
|
For instance, "apropos breakpoint" will list any command that has the word
|
|
|
|
|
"breakpoint" in its help text.
|
|
|
|
|
|
|
|
|
|
CONFIGURATION FILES
|
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
|
|
:program:`lldb` reads things like settings, aliases and commands from the
|
2020-05-27 08:22:53 +08:00
|
|
|
|
.lldbinit file. First, it will read the application specific init file whose
|
|
|
|
|
name is ~/.lldbinit followed by a "-" and the name of the current program. This
|
|
|
|
|
would be ~/.lldbinit-lldb for the command line :program:`lldb` and
|
|
|
|
|
~/.lldbinit-Xcode for Xcode. Secondly, the global ~/.lldbinit will be read.
|
|
|
|
|
Finally, :program:`lldb` will look for an .lldbinit file in the current working
|
|
|
|
|
directory. For security reasons, :program:`lldb` will print a warning and not
|
|
|
|
|
source this file by default. This behavior can be changed by changing the
|
2019-11-21 06:53:37 +08:00
|
|
|
|
target.load-cwd-lldbinit setting.
|
|
|
|
|
|
|
|
|
|
To always load the .lldbinit file in the current working directory, add the
|
|
|
|
|
following command to ~/.lldbinit:
|
|
|
|
|
|
|
|
|
|
settings set target.load-cwd-lldbinit true
|
|
|
|
|
|
|
|
|
|
To never load the .lldbinit file in the current working directory and silence
|
|
|
|
|
the warning, add the following command to ~/.lldbinit:
|
|
|
|
|
|
|
|
|
|
settings set target.load-cwd-lldbinit false
|
|
|
|
|
|
|
|
|
|
SEE ALSO
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
The LLDB project page https://lldb.llvm.org has many different resources
|
|
|
|
|
for :program:`lldb` users ‐‐ the gdb/lldb command equivalence page
|
|
|
|
|
https://lldb.llvm.org/use/map.html can be especially helpful for users
|
|
|
|
|
coming from gdb.
|