gcovr始终显示100%的行覆盖率

问题描述

我使用gcovr运行以下代码,尽管未调用bar,但行覆盖率达到100%。 我在做什么错了?

#include <iostream>

struct A{
    static void foo(){
        std::cout << "foo" << std::endl;
    }

    static void bar(){
        std::cout << "bar" << std::endl;
    }
};

int main() {
    A::foo();
    // A::bar();
}

HTML报告如下所示:

enter image description here

我使用以下CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

set(PROJECT_NAME test_gcovr)
project(${PROJECT_NAME})

if(NOT CMAKE_COMPILER_IS_GNUCXX)
    message("must use gnu compiler")
    EXIT()
endif()

set(CMAKE_CXX_FLAGS "-g -Wall -O0")

add_executable(run_tests ${PROJECT_SOURCE_DIR}/test.cpp)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
include(CodeCoverage)
append_coverage_compiler_flags()

setup_target_for_coverage_gcovr_html(NAME run_tests_coverage
                                    EXECUTABLE run_tests
                                    DEPENDENCIES run_tests)

有了这个CodeCoverage.cmake

我先编译并运行cmake,然后再调用make run_tests_coverage


编辑:在以上示例中,bar似乎不是可执行文件的一部分,尽管-O0 ... 我用以下方法解决了这个问题:

...
bool x = false;
if (x){
    A::bar();
};
...

现在我得到了正确的覆盖率报告。

现在问题仍然存在-如何检查仅标头库的测试范围(不详细查看报告)?


编辑#2:

查看此 Getting useful GCov results for header-only libraries

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...