LLVM 项目博客

LLVM 项目新闻和来自“战壕”的详细信息

LLDB 3.3 及其之后版本

LLVM 项目调试器(LLDB)在 LLVM 3.3 版本发布后迎来了活动的热潮。虽然调试器长期以来一直是 Xcode 的默认工具,但它在 Darwin 之外的潜力还有待挖掘。特别是在过去一年里,开发社区已经超越了其在 OS/X 和 iOS 上的根基,包括对 Linux、Windows 和 FreeBSD 的大量贡献。此外,越来越多的发行版(包括 Debian、Ubuntu 和 Arch)都提供了实验性软件包。


LLDB 架构的潜力很大程度上源于其自身的设计。由于重用了 LLVM 和 Clang,调试器非常适合调试最新的 C++ 代码。这包括 LLVM 动态执行引擎 (MCJIT) 用于表达式求值,LLVM 反汇编器以及 Clang AST 解析器的使用。重用 LLVM 项目组件使得 LLDB 保持轻量级,并将开发人员的精力集中在成为优秀调试器的核心任务上。

总的来说,这款现代调试器从一开始就针对多线程调试、延迟符号化、灵活的回溯以及层次化的命令集(包括 C++ 和 Python 接口)进行了精心设计。这些核心接口的存在使 LLDB 能够体现其作为低级调试器的名称。开发人员可以使用 LLDB 库来以格式无关的方式访问目标文件中的信息,例如调试信息、符号、类型、函数、行表等等。这些信息对于开发调试器、符号化工具和分析工具非常有用。

Python 目前嵌入在 LLDB 内部,可以通过交互式解释器访问。可用的命令集允许在断点、监视点、数据摘要和格式化器等位置运行任意 Python 代码。LLDB 共享库也可以在命令行的 Python 脚本中访问。总的来说,使用任意 Python 代码定制 LLDB 行为、使用 Python 编写扩展以及评估任意 C++ 表达式的能力,为该项目的通用性做出了贡献。

最新的 LLDB 软件包填补了与 Darwin 相比 LLDB 在 Linux 上的一些功能差距。这包括对多线程调试、监视点和向量寄存器集的支持。此外,在进程控制、表达式求值、构建系统以及对 i386 目标的支持方面也做了很多改进。即将推出的功能包括 JIT 调试、核心文件支持以及对新处理器功能的支持。这些工作中的大部分都影响到任何 POSIX 发行版,包括 FreeBSD。目前,x86-64 Linux 构建和目标在 trunk(使用 GCC 和 Clang)中,每次提交到 LLVM、Clang 和 LLDB 时都会进行测试。

Linux 上针对 x86-64 的活动只是其中的一部分。已经开发了 Windows 分支,其中包含第一个将远程调试移植到非 Darwin 平台的版本。目前正在进行评估 LLDB 在 FreeBSD 上的工作,包括使用 ICC 和针对 i386 目标的版本。事实上,过去一年里,LLDB 的活跃贡献者数量已经增加了一倍以上。

在 LLDB 成长的这个阶段,我们非常欢迎反馈意见,因为我们正在扩大测试覆盖率,并使用该工具来调试越来越复杂的应用程序。LLDB 正逐渐成为一个响应迅速的调试器,能够有效地处理一些更难的多线程 C++ 调试案例。

有关 LLDB 架构、功能、源代码、软件包、功能状态或构建信息的更多信息,请访问 lldb.llvm.org。如果您对本版本有任何疑问或意见,请联系 lldb-dev 邮件列表!