clang-cl 代码覆盖率仅一层深

问题描述 投票:0回答:1

我正在尝试在 Windows 上使用 LLVM 工具为大型 C++ 项目生成代码覆盖率,但我所能获得的只是一级深度覆盖率,这是正常行为还是我做错了什么? 这是设置: 我有两节课:

class A
{
  public:
    bool foo() {return true;}
};

class B
{
  private:
    A kung;

  public:
    bool bar(){return kung.foo();}
};

我使用 Google Test 对所有内容进行单元测试:

TEST(Suite, Name)
{
  B ba;
  EXPECT_TRUE(ba.bar());
}

该项目是使用 CMake/Ninja 配置和生成的,并使用 clang-cl 进行编译,具有以下标志:

-fprofile-instr-generate -fcoverage-mapping
。编译在发布时完成,所有优化均关闭 (
-Xclang -O0
)。

运行测试会创建预期的

profraw
文件,然后将其输入到
grcov
中以生成 html 和 markdown 报告。

grcov ./bin --llvm --branch --llvm-path <MS_LLMV_PATH> -b ./bin -s ./Sources -t html,markdown --ignore-not-existing -o .

生成的报告仅显示 50% 的覆盖率,并显示调用了

B::bar()
,但未调用
A::foo()

这种行为是否正确且符合预期?我做错了什么吗?我使用的工具有错误吗?

PS:我还尝试了 --coverage 编译器选项,它生成

.gcno
文件,然后在运行测试后生成
.gcda
文件。但我在报告中得到了更奇怪的结果,代码浏览器中有很多空白行(所以既没有被覆盖也没有被发现!)。

c++ code-coverage clang-cl
1个回答
0
投票

原来我是个白痴:)

我正在为所有库生成静态和动态版本,并且我只是为动态库生成 CC 信息(并且大多数单元测试当前都使用静态库)。

现在一切都很好。

© www.soinside.com 2019 - 2024. All rights reserved.