ESP 跟踪
概述
ESP-IDF 提供了一套跟踪系统,用于程序行为分析和调试。以较小开销从 ESP32 收集运行时数据,并将数据发送到主机。
该系统以 esp_trace 组件为中心。它提供公共跟踪 API,管理活动跟踪会话,并将跟踪编码器与跟踪传输连接起来。SEGGER SystemView、Gcov 和 apptrace 传输等跟踪功能都接入这一模型。
esp_trace 组件支持常用的跟踪格式和传输方式,并设计为可扩展。新的跟踪格式和传输可以在不修改 ESP-IDF 的情况下添加。有关设计的更多信息,请参阅 跟踪架构。
跟踪格式:SEGGER SystemView,用于业界标准的 FreeRTOS 分析(参见 基于 SEGGER SystemView 的系统行为分析);或你自己的记录器(参见 集成自定义跟踪库)。
传输:
apptrace 传输(
app_trace组件),可通过 JTAG 或 UART
选择适合你的路径
目标 |
参考文档 |
|---|---|
分析 FreeRTOS 任务/中断行为 |
|
发送/接收任意应用程序数据,或记录日志到主机 |
|
收集源代码覆盖率 |
|
自动跟踪每次函数进入和退出 |
|
集成第三方跟踪记录器 |
选择传输
跟踪格式与传输可独立选择。请根据可用硬件选择主机链路:
apptrace(JTAG):吞吐量最高,并支持由主机发起的控制(start、stop 或 dump)。需要 JTAG 适配器以及主机上运行的 OpenOCD。适用于 SystemView 以及按需的 Gcov 转储。
apptrace(UART):使用空闲的 UART 而非调试探针,吞吐量低于 JTAG。请选择未被控制台占用的 UART。
主要特性
自动初始化:跟踪在启动时自动配置
多核支持:适用于单核和双核芯片
可扩展:添加自定义跟踪格式或传输;参见 跟踪架构
快速入门:SystemView 跟踪
启用 SEGGER SystemView 跟踪以进行 FreeRTOS 系统分析:
在项目的
idf_component.yml中添加espressif/esp_sysview依赖。启用 CONFIG_ESP_TRACE_LIB_EXTERNAL 以选择外部跟踪库。
启用 CONFIG_ESP_TRACE_TRANSPORT_APPTRACE 以选择 apptrace 传输。
启用 CONFIG_APPTRACE_DEST_JTAG 以将数据目标设为 JTAG。
构建并烧录应用程序:
idf.py build flash
有关 SystemView 的详细用法、OpenOCD 设置和主机端可视化,请参阅 基于 SEGGER SystemView 的系统行为分析。
详细指南
相关文档
ESP Trace:ESP Trace API 参考
应用级追踪:应用层跟踪(传输)API 参考
JTAG 调试:JTAG 调试设置与硬件配置
SEGGER SystemView:官方 SystemView 工具和文档
OpenOCD:开源片上调试器
示例
system/app_trace_basic:基础应用程序跟踪
system/sysview_tracing:SystemView 跟踪示例
system/sysview_tracing_heap_log:基于 SystemView 的堆跟踪
system/gcov:通过 JTAG 获取源代码覆盖率
system/function_tracing:编译器插桩的函数进入/退出跟踪
system/esp_trace_custom_library:外部跟踪库集成模板