| Goals |
| ===== |
| |
| The current state of the art in open source debuggers are that they work in the |
| common cases for C applications, but don't handle many "hard cases" properly. |
| For example, C++ expression parsing, handling overloading, templates, |
| multi-threading, and other non-trivial scenarios all work in some base cases, |
| but don't work reliably. |
| |
| The goal of LLDB is to provide an amazing debugging experience that "just |
| works". We aim to solve these long-standing problems where debuggers get |
| confused, so that you can think about debugging your problem, not about |
| deficiencies in the debugger. |
| |
| With a long view, there is no good reason for a debugger to reinvent its own |
| C/C++ parser, type system, know all the target calling convention details, |
| implement its own disassembler, etc. By using the existing libraries vended by |
| the LLVM project, we believe that many of these problems will be defined away, |
| and the debugger can focus on important issues like process control, efficient |
| symbol reading and indexing, thread management, and other debugger-specific |
| problems. |
| |
| Some more specific goals include: |
| |
| * Build libraries for inclusion in IDEs, command line tools, and other analysis |
| tools |
| * High performance and efficient memory use |
| * Extensible: Python scriptable and use a plug-in architecture |
| * Reuse existing compiler technology where it makes sense |
| * Excellent multi-threaded debugging support |
| * Great support for C, Objective-C and C++ |
| * Retargetable to support multiple platforms |
| * Provide a base for debugger research and other innovation |
| |
| 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. |
| |