LLDB ③ 插件
Python Scripting
LLDB 有一个强大的脚本接口,可以通过 Python 访问。Python 可以通过(交互式)脚本解释器在 LLDB 中使用,也可以作为可以从 Python 解释器导入的 Python 模块使用。在 LLDB 调试工具中, Python 脚本可以帮助完成许多任务,包括检查程序数据、迭代容器以及确定断点是否应该停止执行或继续执行。
LLDB 提供了公共Pythong SB API文档给开发者用于自定义 LLDB 插件工。并且提供了一些教程Python-reference以便开发者入门。
LLDB Python API
LLDB 提供了 lldb Package
,包含用于 Python 绑定的公共 API,下面列举了一些重要的类。
类 | 描述 | |
---|---|---|
SBTarget | 表示在调试器下运行的目标程序 | |
SBProcess | 表示与目标程序相关的进程 | |
SBThread | 代表一个执行线程 | SBProcess包含 SBThreads |
SBFrame | 表示与线程关联的堆栈帧之一 | SBThread 包含 SBFrame(s) |
SBSymbolContext | 存储各种调试器相关信息的容器 | |
SBValue | 表示变量、寄存器或表达式的值 | |
SBModule | 表示可执行映像及其关联的对象和符号文件 | SBTarget包含 SBM 模块 |
SBBreakpoint | 表示一个逻辑断点及其相关设置 | SBTarget包含 SBBreakpoints |
SBSymbol | 表示可能与堆栈帧相关联的符号 | |
SBCompileUnit | 表示一个编译单元,或编译后的源文件 | |
SBFunction | 表示一个通用函数,可以内联也可以不内联 | |
SBBlock | 表示一个词法块 | SBFunction包含 SBBlock |
SBLineEntry | 指定与连续指令范围和源文件位置的关联 | SBCompileUnit包含 SBLineEntry |
配置文件
LLDB 从 .lldbinit
文件中读取设置、别名和命令等内容。
首先,lldb将尝试读取名为 ~/.lldbinit-xxx
的应用程序特定的 init 文件, ~/.lldbinit-lldb
用于命令行 lldb 和 ~/.lldbinit-Xcode
用于 Xcode。如果没有特定于应用程序的 init
文件,lldb 将查找 ~/.lldbinit
。
其次,它将在当前工作目录中查找 .lldbinit
文件。出于安全原因,LLDB 将打印警告并且默认情况下不获取此文件。可以通过更改 target.load-cwd-lldbinit
设置来更改此行为。
facebook/chisel
Chisel 是 facebook 提供的 LLDB 的用于调试 iOS应用程序的命令集合。
安装
-
Chisel 可以通过 brew 安装
brew install chisel
-
使用
.lldbinit
文件配置导入command script import /usr/local/opt/chisel/libexec/fbchisellldb.py
DerekSelander/LLDB
DerekSelander/LLDB 是德里克·塞兰德 写的别名/正则表达式和 Python 脚本的集合。并且他写了一本书名为 Advanced Apple Debugging and Reverse Engineering 可以更好的了解 LLDB。
安装
- 克隆仓库 https://github.com/DerekSelander/LLDB.git
- 使用
.lldbinit
文件配置导入