forked from OSchip/llvm-project
91 lines
3.5 KiB
ReStructuredText
91 lines
3.5 KiB
ReStructuredText
About
|
|
=====
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
Why a New Debugger?
|
|
-------------------
|
|
|
|
In order to achieve our goals we decided to start with a fresh architecture
|
|
that would support modern multi-threaded programs, handle debugging symbols in
|
|
an efficient manner, use compiler based code knowledge and have plug-in support
|
|
for functionality and extensions. Additionally we want the debugger
|
|
capabilities to be available to other analysis tools, be they scripts or
|
|
compiled programs, without requiring them to be GPL.
|
|
|
|
Compiler Integration Benefits
|
|
-----------------------------
|
|
|
|
LLDB currently converts debug information into clang types so that it can
|
|
leverage the clang compiler infrastructure. This allows LLDB to support the
|
|
latest C, C++, Objective-C and Objective-C++ language features and runtimes in
|
|
expressions without having to reimplement any of this functionality. It also
|
|
leverages the compiler to take care of all ABI details when making functions
|
|
calls for expressions, when disassembling instructions and extracting
|
|
instruction details, and much more.
|
|
|
|
The major benefits include:
|
|
|
|
- Up to date language support for C, C++, Objective-C
|
|
- Multi-line expressions that can declare local variables and types
|
|
- Utilize the JIT for expressions when supported
|
|
- Evaluate expression Intermediate Representation (IR) when JIT can't be used
|
|
|
|
Reusability
|
|
-----------
|
|
|
|
The LLDB debugger APIs are exposed as a C++ object oriented interface in a
|
|
shared library. The lldb command line tool links to, and uses this public API.
|
|
On Mac OS X the shared library is exposed as a framework named LLDB.framework,
|
|
and unix systems expose it as lldb.so. The entire API is also then exposed
|
|
through Python script bindings which allow the API to be used within the LLDB
|
|
embedded script interpreter, and also in any python script that loads the
|
|
lldb.py module in standard python script files. See the Python Reference page
|
|
for more details on how and where Python can be used with the LLDB API.
|
|
|
|
Sharing the LLDB API allows LLDB to not only be used for debugging, but also
|
|
for symbolication, disassembly, object and symbol file introspection, and much
|
|
more.
|
|
|
|
Platform Support
|
|
----------------
|
|
|
|
LLDB is known to work on the following platforms, but ports to new platforms
|
|
are welcome:
|
|
|
|
* Mac OS X desktop user space debugging for i386 and x86-64
|
|
* iOS simulator debugging on i386
|
|
* iOS device debugging on ARM
|
|
* Linux local user-space debugging for i386, x86-64 and PPC64le
|
|
* FreeBSD local user-space debugging for i386 and x86-64
|
|
* Windows local user-space debugging for i386 (*)
|
|
|
|
(*) Support for Windows is under active development. Basic functionality is
|
|
expected to work, with functionality improving rapidly.
|
|
|
|
Get Involved
|
|
------------
|
|
|
|
To check out the code, use:
|
|
|
|
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb
|
|
|
|
Note that LLDB generally builds from top-of-trunk
|
|
|
|
* On macOS with Xcode
|
|
* On Linux and FreeBSD (with clang and libstdc++/libc++)
|
|
* On NetBSD (with GCC and clang and libstdc++/libc++)
|
|
* On Windows with VS 2012 or higher using CMake
|
|
|
|
See the LLDB Build Page for platform-specific build instructions.
|
|
|
|
Discussions about LLDB should go to the `lldb-dev
|
|
<http://lists.llvm.org/mailman/listinfo/lldb-dev>`__ mailing list. Commit
|
|
messages for the lldb SVN module are automatically sent to the `lldb-commits
|
|
<http://lists.llvm.org/mailman/listinfo/lldb-commits>`__ mailing list , and
|
|
this is also the preferred mailing list for patch submissions.
|
|
|
|
See the Projects page if you are looking for some interesting areas to
|
|
contribute to lldb.
|