代码覆盖率
源代码覆盖率提供了程序运行时每条执行路径的执行次数和频率数据。GCOV 是一个 GCC 工具,配合编译器使用时,可生成日志文件,显示每一行源代码的执行次数。
使用 gcov,配置 ESP-IDF 项目生成 gcda/gcno 覆盖率文件。请参阅 GCOV 代码覆盖率,以详细了解如何在 ESP-IDF 项目中使用 GCOV 的代码覆盖率功能。
可使用 ESP-IDF:配置 SDKConfig 文件以启用代码覆盖率 命令在 SDK 配置编辑器中设置所需配置。
代码覆盖率示例
本教程将围绕 ESP-IDF GCOV 示例 展开说明。
前往菜单栏
查看>命令面板。输入
ESP-IDF:新建项目并选择要使用的 ESP-IDF 版本。备注
如果未看到该选项,请检查当前的 ESP-IDF 设置,详见 Installation。
系统将弹出用于配置项目的窗口。从 ESP-IDF 示例列表中选择示例,在
system部分选择gcov。页面顶部会出现Create Project Using Example GCOV按钮,页面下方会出现项目描述。点击Create Project Using Example GCOV。
选择容器目录用于复制示例项目。例如,如果选择
/Users/myUser/someFolder,则生成的文件夹将为/Users/myUser/someFolder/gcov。该新项目目录将被创建并在 Visual Studio Code 中打开。选择乐鑫目标芯片(如 esp32,esp32s2 等):
前往菜单栏
查看>命令面板。输入
ESP-IDF:设置乐鑫设备目标命令。默认的目标是esp32,本教程将使用该目标。
使用
ESP-IDF:配置 SDKConfig 文件以启用代码覆盖率命令配置 sdkconfig 项目,或使用ESP-IDF:SDK 配置编辑器命令手动配置。完成所有更改后,点击Save并关闭窗口。
该示例默认启用以下选项:
在
Component Config>Application Level Tracing>Data Destination下选择Trace Memory,以启用应用跟踪模块。在
Component Config>Application Level Tracing>GCOV to Host Enable下启用 GCOV 到主机接口。在
Component Config>ESP32-specific>OpenOCD Debug Stubs下启用 OpenOCD 调试桩。
通过
ESP-IDF:构建项目、ESP-IDF:烧录项目和ESP-IDF:监视设备命令构建并烧录项目,启动 ESP-IDF 监视器。备注
也可以直接使用
ESP-IDF:构建、烧录项目并监视设备命令一次性执行三个操作。启动 OpenOCD 并发送命令。要在扩展启动 OpenOCD,请执行
ESP-IDF:OpenOCD 管理器命令,或使用 Visual Studio Code 状态栏中的OpenOCD Server(Running | Stopped)按钮。OpenOCD 服务器输出在菜单栏查看>输出>ESP-IDF中显示。前往菜单栏
终端>新建终端,执行telnet <oocd_host> <oocd_port>,默认值为telnet localhost 4444。最新版 macOS 的用户若无法使用telnet,可使用nc <oocd_host> <oocd_port>。备注
可以通过修改
openocd.tcl.host和openocd.tcl.port配置项来更改上述值。发送 OpenOCD 命令
esp gcov dump执行硬编码转储,该命令会基于此示例执行两次硬编码转储。然后发送esp gcov命令进行即时运行时转储。
数据转储完成后,在编辑器中打开所需文件并执行
ESP-IDF:添加编辑器覆盖率命令,编辑器将高亮显示代码覆盖率。可以通过在扩展的
settings.json配置文件中添加或修改相应的配置项,自定义高亮颜色。已覆盖的行在浅色主题中使用
idf.coveredLightTheme,在深色主题中使用idf.coveredDarkTheme。部分覆盖的行在浅色主题中使用
idf.partialLightTheme,在深色主题中使用idf.partialDarkTheme。未覆盖的行在浅色主题中使用
idf.uncoveredLightTheme,在深色主题中使用idf.uncoveredDarkTheme。
Visual Studio Code 支持
red、rgb(255,0,120)或rgba(120,0,0,0.1)格式。
配置完成后,使用
ESP-IDF:移除编辑器覆盖率命令移除代码覆盖率。前往菜单栏
查看>命令面板。输入并选择
ESP-IDF:生成 HTML 格式的代码覆盖率报告命令。
备注
如果遇到任何问题,请查看 故障排除。