feature: Weex APM

This commit is contained in:
FantasticLBP
2025-12-30 21:07:15 +08:00
parent 1142064d28
commit 7ac7513900
158 changed files with 9880 additions and 280 deletions

View File

@@ -1,5 +1,46 @@
# Crash
# LLDB
## LLDB 架构
<img src="./../assets/LLDBArchitecture.png" style="zoom:40%" />
说明:类似一个 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
<img src="./../assets/LLDBWorkflow.png" style="zoom:40%" />
说明:
- **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()`)操控目标进程。
## Crash 类型
- 容易越界(数组、字典、字符串等) NSRangeException
- 使用未初始化的变量