/**

  • @file gdbserver.md
  • @brief Crash 现场还原 —— gdbserver 离线调试机制
  • @section gdbserver_overview 概述
  • gdbserver 是 OpenVela Crash 现场还原工具链中的分析执行层,
  • 基于 GDB Remote Serial Protocol(RSP),
  • 用于将设备侧采集的 Crash 现场数据(Coredump / Crash Log / Memory Dump)
  • 转换为可被 GDB 解析和交互的调试环境。
  • 与在线调试不同,gdbserver 面向的是“已经停止运行的系统现场”,
  • 其核心目标是:
    • 将原始二进制现场数据转化为可视化、可交互的调试视图
    • 在离线环境中重建接近实时调试的分析体验
  • @section gdbserver_position 机制定位
  • 在调试路径中,gdbserver 位于:
    • 运行时诊断(Runtime Diagnosis)之后
    • 现场保留(Coredump / Crash Log)之后
    • 深度还原(Root Cause Analysis)之前
  • gdbserver 本身不负责采集现场,
  • 而是负责“解释和还原”已经采集的现场数据。
  • @section gdbserver_corevalue 核心价值
  • gdbserver 的核心价值体现在以下几个方面:
    • 地址 → 符号 → 源码行号的自动映射
    • 调用栈(Backtrace)的自动重建
    • 寄存器、内存、变量的交互式查询
    • 多线程 / 多核现场的统一分析
  • 它将不可读的二进制数据,转化为工程师可直接理解的系统语义视图。
  • @section gdbserver_supported_input 支持的输入类型
  • gdbserver 支持多种 Crash 现场输入形式,可单独或组合使用:
    • Coredump 文件(.core)
    • Crash Log(日志形式保存的寄存器 / 栈 / PC / LR)
    • 原始内存转储(Memory Dump)
  • 不同输入类型对应不同的分析深度:
    • Crash Log:最轻量,适合快速定位调用链
    • Memory Dump:用于补充特定内存区域
    • Coredump:完整系统快照,分析能力最强
  • @section gdbserver_basic_usage 基本用法
  • gdbserver 提供统一的命令行入口:
  • @code
  • usage: gdbserver.py [-h]
  • -a {arm,arm-a,arm64,riscv,x86-64,esp32s3,xtensa}
  • -e ELFFILE
  • [-p PORT] [--proxy PROXY]
  • [-r [RAWFILE ...]] [-c CORE]
  • [--remap [REMAP ...]]
  • [-l LOG] [-d]
  • [-g GDB] [-i INIT_CMD]
  • @endcode
  • gdbserver 本质上是一个基于 Crash 数据构建的 NuttX GDB Server(nxstub)。
  • @section gdbserver_parameters 参数说明
    • @b -a, --arch
  • 目标架构类型,必须指定,例如:arm、arm-a、arm64、riscv、xtensa。
    • @b -e, --elffile
  • 对应设备运行版本的 ELF 文件(必须匹配)。
    • @b -p, --port
  • gdbserver 监听端口,默认 1234。
    • @b --proxy
  • GDB 代理转发(高级场景使用)。
    • @b -r, --rawfile
  • 原始内存转储文件,格式为:
  • @code
  • mem.bin:0x20000000
  • @endcode
    • @b -c, --core
  • Coredump 文件路径。
    • @b --remap
  • 地址重映射配置,用于 AMP / 多核地址空间不一致场景。
    • @b -l, --log
  • Crash Log 文件路径。
    • @b -d, --debug
  • 启用 gdbserver 自身调试日志。
    • @b -g, --gdb
  • 指定 GDB 可执行文件路径,并自动拉起 GDB 会话。
    • @b -i, --init-cmd
  • GDB 启动后自动执行的初始化命令。
  • @section gdbserver_usage_pattern 常见使用模式
  • @subsection gdbserver_use_crashlog 基于 Crash Log
  • @code
  • gdbserver.py -a arm -e Vela.elf -l crash.log
  • gdb-multiarch Vela.elf -ex "target remote localhost:1234"
  • @endcode
  • 适合快速分析调用链、寄存器和基础栈信息。
  • @subsection gdbserver_use_coredump 基于 Coredump
  • @code
  • gdbserver.py -a arm -e Vela.elf -c coredump.core
  • gdb-multiarch Vela.elf -ex "target remote localhost:1234"
  • @endcode
  • 提供最完整的系统现场分析能力。
  • @subsection gdbserver_use_memdump 基于内存转储
  • @code
  • gdbserver.py -a arm-a -e Vela.elf -r memdump.bin:0x40200000
  • @endcode
  • 用于补充特定地址空间的数据。
  • @section gdbserver_multicore 多核场景支持
  • 在 AMP / SMP 系统中:
    • 单一 Coredump 可包含多个 CPU 的内存与寄存器信息
    • gdbserver 可针对不同核加载不同 ELF
    • 通过 remap 参数解决地址空间差异
  • 示例:
  • @code
  • gdbserver.py -a xtensa -e Vela_audio.elf -c coredump.core
  • @endcode
  • @section gdbserver_analysis_capability 分析能力
  • 通过 GDB 客户端,gdbserver 支持:
    • 查看调用栈(bt / bt full)
    • 查看寄存器(info reg)
    • 切换线程(info threads / thread )
    • 查看内存(x/x )
    • 查看变量与结构体(p
  • 其分析体验接近于“对一个已冻结进程的在线调试”。
  • @section gdbserver_relation 与其它工具的关系
    • gdbserver 是 Coredump / Crash Log 的解析执行层
    • GDB Plugin 构建在 gdbserver 之上,提供系统语义级调试能力
    • 二者共同构成 OpenVela 的离线调试闭环
  • @section gdbserver_scenario 适用场景
  • gdbserver 适用于以下典型问题:
    • 无法复现的 Crash
    • 一次性 HardFault / Panic
    • 内存破坏、竞态条件导致的异常
    • 无法接入 J-Link / Trace32 的设备
  • 在 Crash 现场还原阶段,gdbserver 是将“数据”转化为“结论”的关键工具。 */