rtos-debug

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

RTOS 调试

RTOS Debugging

适用场景

Applicable Scenarios

  • 固件运行了 RTOS(FreeRTOS、RT-Thread 或 Zephyr),需要查看任务状态。
  • 怀疑任务栈溢出导致 HardFault 或异常行为。
  • 需要检测死锁(所有任务都处于等待状态)。
  • 需要查看队列、信号量等内核对象状态。
  • 需要自动识别固件使用的 RTOS 类型。
  • Firmware runs RTOS (FreeRTOS, RT-Thread, or Zephyr) and needs to check task status.
  • Suspect task stack overflow causes HardFault or abnormal behavior.
  • Need to detect deadlocks (all tasks are in waiting state).
  • Need to view the status of kernel objects such as queues and semaphores.
  • Need to automatically identify the RTOS type used by the firmware.

必要输入

Required Input

  • 带符号的
    ELF
    文件路径。
  • 已运行的 GDB Server(OpenOCD 或 JLinkGDBServer),通过
    --port
    指定 GDB 端口。
  • 可选显式指定 RTOS 类型(
    --rtos freertos|rt-thread|zephyr
    )。
  • Path to the signed
    ELF
    file.
  • Running GDB Server (OpenOCD or JLinkGDBServer), specify the GDB port via
    --port
    .
  • Optional explicit specification of RTOS type (
    --rtos freertos|rt-thread|zephyr
    ).

自动探测

Automatic Detection

  • 通过 ELF 符号表自动判断 RTOS 类型:
    vTaskStartScheduler
    → FreeRTOS,
    rt_thread_init
    → RT-Thread,
    k_thread_create
    → Zephyr。
  • 不依赖 OpenOCD 的 RTOS awareness 功能,改用 GDB 直接读取 RTOS 内核数据结构。
  • FreeRTOS 提供完整支持(任务列表、栈水位、队列),RT-Thread/Zephyr 提供基本任务列表支持。
  • Automatically determine the RTOS type through the ELF symbol table:
    vTaskStartScheduler
    → FreeRTOS,
    rt_thread_init
    → RT-Thread,
    k_thread_create
    → Zephyr.
  • Does not depend on OpenOCD's RTOS awareness function, instead uses GDB to directly read RTOS kernel data structures.
  • Full support for FreeRTOS (task list, stack watermark, queues), basic task list support for RT-Thread/Zephyr.

执行步骤

Execution Steps

  1. 先阅读 references/usage.mdreferences/rtos-patterns.md,了解常见 RTOS 问题模式。
  2. 确保 GDB Server(OpenOCD 或 JLinkGDBServer)已在运行。
  3. 若不确定 RTOS 类型,先运行 scripts/rtos_debugger.py
    --detect
    模式。
  4. 使用
    --tasks
    查看任务列表和状态。
  5. 使用
    --stack-check
    检查各任务栈水位。
  6. 使用
    --deadlock
    检查死锁特征。
  7. 使用
    --queues
    查看队列和信号量状态。
  1. First read references/usage.md and references/rtos-patterns.md to understand common RTOS problem patterns.
  2. Ensure the GDB Server (OpenOCD or JLinkGDBServer) is running.
  3. If unsure of the RTOS type, first run the
    --detect
    mode of scripts/rtos_debugger.py.
  4. Use
    --tasks
    to view the task list and status.
  5. Use
    --stack-check
    to check the stack watermark of each task.
  6. Use
    --deadlock
    to check for deadlock characteristics.
  7. Use
    --queues
    to view the status of queues and semaphores.

失败分流

Failure Diversion

  • 当缺少 GDB 时,返回
    environment-missing
  • 当没有可用的
    ELF
    时,返回
    artifact-missing
  • 当 GDB 无法连接到 GDB Server 时,返回
    connection-failure
  • 当 ELF 中未检测到 RTOS 符号时,返回
    project-config-error
  • 当 GDB 可以连接但无法读取 RTOS 数据结构时,返回
    target-response-abnormal
  • 当无法确定 RTOS 类型时,返回
    ambiguous-context
  • Returns
    environment-missing
    when GDB is missing.
  • Returns
    artifact-missing
    when no available
    ELF
    is present.
  • Returns
    connection-failure
    when GDB cannot connect to the GDB Server.
  • Returns
    project-config-error
    when no RTOS symbols are detected in the ELF.
  • Returns
    target-response-abnormal
    when GDB can connect but cannot read RTOS data structures.
  • Returns
    ambiguous-context
    when the RTOS type cannot be determined.

平台说明

Platform Notes

  • 自带脚本使用 Python 标准库和 subprocess 调用 GDB,跨平台兼容。
  • GDB Server 需要由用户或上游 skill(
    debug-gdb-openocd
    debug-jlink
    )预先启动。
  • RTOS 数据结构读取依赖 ELF 符号信息,Release 优化可能导致部分符号被优化掉。
  • The built-in scripts use Python standard libraries and subprocess to call GDB, which is cross-platform compatible.
  • The GDB Server needs to be pre-started by the user or upstream skills (
    debug-gdb-openocd
    or
    debug-jlink
    ).
  • Reading RTOS data structures depends on ELF symbol information; Release optimization may cause some symbols to be optimized out.

输出约定

Output Conventions

  • 输出检测到的 RTOS 类型和版本(如果可获取)。
  • 输出任务列表,包含任务名、状态、优先级和栈使用信息。
  • 栈水位低于安全阈值时输出告警。
  • 死锁检测结果以明确的是/否形式输出。
  • Project Profile
    中更新
    rtos
    字段。
  • Output the detected RTOS type and version (if available).
  • Output the task list, including task name, status, priority, and stack usage information.
  • Output an alarm when the stack watermark is below the safety threshold.
  • Output deadlock detection results in a clear yes/no format.
  • Update the
    rtos
    field in
    Project Profile
    .

交接关系

Handover Relationships

  • 当确认栈溢出时,建议使用
    memory-analysis
    分析固件内存布局。
  • 当需要更深入的单步调试时,交给
    debug-gdb-openocd
    debug-jlink
  • When stack overflow is confirmed, it is recommended to use
    memory-analysis
    to analyze the firmware memory layout.
  • When deeper single-step debugging is required, hand over to
    debug-gdb-openocd
    or
    debug-jlink
    .