You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在批处理脚本中从gcovr控制台提取行、分支、函数覆盖率结果

Windows批处理提取gcovr覆盖率百分比并保存

需求背景

执行以下gcovr命令生成覆盖率报告:

gcovr -v -b -r .^
 --xml-pretty^
 -o ".\reports\publish\coverage.xml"^
 --sort-percentage^
 -s ^
 --exclude=".*(abcd_|_abcd|-xy|xy_|_xy($|\/)|APK_GENERATED).*" || goto :error

命令执行后控制台会输出各类日志,最终包含如下格式的覆盖率数据:

(DEBUG) Gathered coveraged data for 23 files

  • lines: 99.9% (1104 out of 1105)
  • functions: 100.0% (142 out of 142)
  • branches: 96.6% (312 out of 323)

需要提取其中的百分比数据,保存为如下格式的文件:

  • lines: 99.9%
  • functions: 100.0%
  • branches: 96.6%

批处理实现脚本

@echo off
setlocal enabledelayedexpansion

:: 定义文件路径
set "RESULT_FILE=.\reports\publish\coverage_summary.txt"
set "TEMP_FILE=gcovr_output.tmp"

:: 执行gcovr,同时输出到控制台和临时文件,保留错误码
powershell -Command "& {gcovr -v -b -r . --xml-pretty -o '.\reports\publish\coverage.xml' --sort-percentage -s --exclude='.*(abcd_|_abcd|-xy|xy_|_xy($|\/)|APK_GENERATED).*' | Tee-Object -FilePath %TEMP_FILE%; exit $LASTEXITCODE}" || goto :error

:: 提取目标覆盖率行,处理格式后写入结果文件
> "%RESULT_FILE%" (
    for /f "delims=(" %%a in ('findstr /r "^- lines: ^- functions: ^- branches:" %TEMP_FILE%') do (
        set "raw_line=%%a"
        :: 去掉行尾的空格(括号前的多余空格)
        echo !raw_line:~0,-1!
    )
)

:: 清理临时文件
del %TEMP_FILE% 2>nul
echo 覆盖率摘要已保存到 %RESULT_FILE%
goto :end

:error
echo 错误:gcovr执行失败,错误代码:%errorlevel%
del %TEMP_FILE% 2>nul
exit /b %errorlevel%

:end
endlocal

脚本说明

  1. 双输出处理:借助PowerShell的Tee-Object,既保留gcovr的控制台输出,又将内容写入临时文件用于后续提取。
  2. 精准行过滤:用findstr正则匹配,只筛选包含lines:、functions:、branches:的目标行,避免无关日志干扰。
  3. 格式修正:通过for /f以左括号为分隔符截取内容,再去掉行尾多余空格,生成符合要求的简洁格式。
  4. 错误兼容:保留原命令的错误跳转逻辑,执行失败时自动清理临时文件并返回错误码,保证脚本健壮性。

内容的提问来源于stack exchange,提问作者Vandana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:08:15