【问题标题】:Gcov to consider filename and function name as an input for computing code coverageGcov 将文件名和函数名作为计算代码覆盖率的输入
【发布时间】:2019-01-22 06:51:05
【问题描述】:

目前在我们的项目中,我们的客户和我们的团队并行工作,以构建两个团队模块所需的代码。我们使用 gcov 进行代码覆盖。目前生成的覆盖范围显示了两个团队。有没有办法只为我们的模块生成单元 gcov 覆盖率。(我们的模块不是单独构建的)。

有什么方法可以只为我们的文件运行(或)是否可以基于函数名运行?

【问题讨论】:

    标签: gcov


    【解决方案1】:

    是的,有两种主要方法可以控制生成的覆盖率报告:

    1. 告诉您的生成器(例如lcovgcovr)包含/排除某些文件模式
    2. 仅编译启用覆盖的源文件。

    (1) 比 (2) 容易得多。例如,如果您使用lcov,请考虑--extract 选项:

    如果您只想提取覆盖率数据,请使用此开关 跟踪文件中的特定文件集。附加命令 行参数将被解释为 shell 通配符模式 (请注意,它们可能需要相应地转义以防止 壳首先扩展它们)。中的每个文件条目 至少匹配其中一种模式的跟踪文件将是 提取出来的。

    (2) 可能很困难(或不可能),具体取决于您的构建系统。为此,您需要:

    1. 使用 --coverage 编译您的模块(相当于 GNU 编译器的 -ftest-coverage -fprofile-arcs
    2. 将您的图书馆与 lgcov 链接。

    这将生成 *.gcno 'notes' 文件,告诉覆盖生成器您的源文件用于您使用 --coverage 标志编译的文件。然后,在运行您的测试套件时,应该只为同一组文件生成*.gcda 文件。运行最终覆盖率报告/HTML 生成器只会为您的模块生成报告。

    为了说明,这里有一个简单的 CMake 文件,它只生成 covered.cxx 的覆盖率信息。注意covered 库的额外target_compile_optionstarget_link_libraries

    add_executable(${PROJECT_NAME} main.cxx)                  
    
    add_library(not-covered SHARED not-covered.cxx)           
    add_library(covered SHARED covered.cxx)                   
    
    target_compile_options(covered PRIVATE --coverage)        
    target_link_libraries(covered PRIVATE --coverage)         
    
    target_link_libraries(${PROJECT_NAME} covered not-covered)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-22
      • 2011-06-06
      • 2021-07-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 2012-01-14
      • 2011-03-01
      相关资源
      最近更新 更多