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

gcovr生成覆盖率报告时文件处理失败的解决求助

问题描述

尝试用gcov和gcovr生成覆盖率报告时,gcovr无法处理目标文件,相关信息如下:

编译命令(以Particle3D.cpp为例)

/usr/bin/g++-11 -DAPP_VERSION=\"0.0.0\" -DBOOST_ALL_DYN_LINK -DCore_EXPORTS -DFMT_SHARED -DOPENVDB_DLL -DSPDLOG_COMPILED_LIB -DSPDLOG_FMT_EXTERNAL -I/workspace/src/Mandos/Core/../.. -I/workspace/build/ci-x86_64-gcc-11-Debug-gcov/src/Mandos/Core/../.. -isystem /home/dev/.conan2/p/openvdb7d765a96317/p/include -isystem /home/dev/.conan2/p/b/boost4946fa66ec618/p/include -isystem /home/dev/.conan2/p/zlib94980e21071ae/p/include -isystem /home/dev/.conan2/p/onetb4c5f56eddd2b6/p/include -isystem /home/dev/.conan2/p/imath50a3e93596d2e/p/include -isystem /home/dev/.conan2/p/imath50a3e93596d2e/p/include/Imath -isystem /home/dev/.conan2/p/eigen3d88c0279cc26/p/include/eigen3 -isystem /home/dev/.conan2/p/tracy3ca493a7de887/p/include -isystem /home/dev/.conan2/p/spdlob47137badbb6c/p/include -isystem /home/dev/.conan2/p/fmt2942afe02511d/p/include -m64 -g -std=c++20 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden --coverage -O0 -g -pedantic -Wall -Wextra -Wextra-semi -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused -Woverloaded-virtual -Wpedantic -Wconversion -Wsign-conversion -Wnull-dereference -Wdouble-promotion -Wformat=2 -Wimplicit-fallthrough -Wmisleading-indentation -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wuseless-cast -Werror -pedantic-errors -o src/Mandos/Core/CMakeFiles/Core.dir/MechanicalStates/Particle3D.cpp.o -c /workspace/src/Mandos/Core/MechanicalStates/Particle3D.cpp

执行的gcovr命令

在构建目录/build/ci-gcc-11-Debug-gcov/下运行:

gcovr --xml-pretty --print-summary -o coverage.xml --root ../../

错误信息

(DEBUG) Processing file: /workspace/build/ci-x86_64-gcc-11-Debug-gcov/src/Mandos/Core/CMakeFiles/Core.dir/MechanicalStates/Particle3D.cpp.gcno
(DEBUG) Running gcov: 'gcov --help' in '.'
(DEBUG) Running gcov: 'gcov --help-hidden' in '.'
(DEBUG) Running gcov: 'gcov /workspace/build/ci-x86_64-gcc-11-Debug-gcov/src/Mandos/Core/CMakeFiles/Core.dir/MechanicalStates/Particle3D.cpp.gcno --branch-counts --branch-probabilities --all-blocks --demangled-names --hash-filenames --object-directory .' in '/workspace/build/ci-x86_64-gcc-11-Debug-gcov/src/Mandos/Core/CMakeFiles/Core.dir/MechanicalStates/.'
(ERROR) Trouble processing '/workspace/build/ci-x86_64-gcc-11-Debug-gcov/src/Mandos/Core/CMakeFiles/Core.dir/MechanicalStates/Particle3D.cpp.gcno' with working directory '/workspace/build/ci-x86_64-gcc-11-Debug-gcov/src/Mandos/Core/CMakeFiles/Core.dir/MechanicalStates/.'.

gcovr版本为7.0,需排查并解决该问题。


排查与解决方法

1. 确保gcov版本与gcc匹配

gcov必须和编译用的gcc版本严格对应,当前编译用g++-11,需确认调用的gcov是gcov-11:

gcov --version

若版本不符,执行gcovr时指定对应版本的gcov:

gcovr --xml-pretty --print-summary -o coverage.xml --root ../../ --gcov-executable gcov-11

2. 检查gcda文件是否存在

gcovr处理gcno文件时依赖程序运行后生成的gcda覆盖率数据文件,检查Particle3D.cpp.gcda是否存在于/workspace/build/ci-x86_64-gcc-11-Debug-gcov/src/Mandos/Core/CMakeFiles/Core.dir/MechanicalStates/目录下。若不存在,需先运行测试程序生成覆盖率数据。

3. 调整gcovr路径参数

当前--root参数的相对路径可能导致解析混乱,可尝试:

  • 切换到项目根目录/workspace/执行,明确指定构建目录:
cd /workspace/
gcovr --xml-pretty --print-summary -o coverage.xml --build-dir ./build/ci-x86_64-gcc-11-Debug-gcov/
  • 或在构建目录内执行时,使用绝对路径避免歧义:
gcovr --xml-pretty --print-summary -o coverage.xml --root /workspace/ --object-directory /workspace/build/ci-x86_64-gcc-11-Debug-gcov/src/Mandos/Core/CMakeFiles/Core.dir/MechanicalStates/

4. 验证文件权限

确保Particle3D.cpp.gcno、Particle3D.cpp.gcda及对应目录有读写权限,gcovr需要读取这些文件并生成临时文件。

5. 获取详细调试日志

添加--verbose参数获取更具体的错误细节,帮助定位问题:

gcovr --verbose --xml-pretty --print-summary -o coverage.xml --root ../../ --gcov-executable gcov-11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:35:57