mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-24 20:00:37 +00:00
2.2 KiB
2.2 KiB
LLDB
LLDB 架构
说明:类似一个 CS 架构。
lldb-mi的角色: 它是一个协议适配器,专注于将 GDB/MI 协议 翻译成 LLDB API 调用。API是关键桥梁:lldb-mi几乎所有的功能都通过调用 LLDB Public API 来实现。- Core 下的模块是 LLDB 的能力: 图中
Core下列出的Object Files,Symbols,Process等,代表了 LLDB 调试器引擎本身提供的强大核心功能。lldb-mi依赖 API 来利用这些功能。 - 依赖关系:
lldb-mi->API-> (LLDB 核心引擎的)Object Files,Mach-O/ELF,Symbols,DWARF,Disassembly,LLVM,Process,GDB Remote。 - 目的: 这张图说明了
lldb-mi是如何构建在 LLDB 强大的核心调试引擎之上,通过标准的 API 调用其功能,从而为支持 GDB/MI 协议的客户端提供调试服务。
LLDB Workflow
说明:
-
lldb-server:调试服务端,
lldb-server作为“调试代理”,直接操控目标程序。分为两种部署方式:-
Host 端:调试本地程序(如 macOS 进程)。
-
Remote 端:部署到目标设备(如手机/嵌入式设备),直接控制被调试程序
-
-
通信层:TCP + GDB RSP 协议
- TCP Socket:物理传输通道,连接 Host 的 LLDB 和 Remote 的 lldb-server
- GDB RSP (Remote Serial Protocol)
- 基于 ASCII 的调试协议(明文消息,如
$m<addr>,<length>#<checksum>读取内存) - 历史原因:兼容 GDB 的远程协议,使 LLDB 能对接各类设备(Android gdbserver 等)
- 基于 ASCII 的调试协议(明文消息,如
QA:好像有点反人类设计,手机上反而是 Server,电脑端的 LLDB 反而是 Client?也就是为什么必须让手机充当 Server?
权限问题:
- 手机操作系统(如 iOS)禁止外部进程直接访问 App 内存。
- 只有手机本地的
lldb-server可通过系统权限(如task_for_pid())操控目标进程。