Files
knowledge-kit/Chapter1 - iOS/1.141.md
2026-01-02 10:28:57 +08:00

2.2 KiB
Raw Blame History

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 等)

QA好像有点反人类设计手机上反而是 Server电脑端的 LLDB 反而是 Client也就是为什么必须让手机充当 Server

权限问题

  • 手机操作系统(如 iOS禁止外部进程直接访问 App 内存。
  • 只有手机本地的 lldb-server 可通过系统权限(如 task_for_pid())操控目标进程。