覆盖率扫描仪介绍

CoverageScanner 是一个 C++ 程序,实际上替换了常规的编译器。它使用本地编译器的预处理器程序处理源代码,然后在预处理的程序中插入运行时检测代码,并在最后像正常构建一样编译和链接项目文件。

CoverageScanner 的运行时检测过程包括

  1. 声明一个包含运行时检测结果的静态表。
  2. 生成一个库,在程序终止、接收到 UNIX® 信号或 Microsoft® Windows 事件时生成执行报告。
  3. 对于每个相关的语句或布尔表达式,添加自己的仪测代码。

使用的编译器、链接器和预处理器来自本地环境(gcc、Visual Studio 等)。Coco 工具是透明使用的,开发者只需将 cs 前缀添加到编译器可执行文件名称中即可启用代码覆盖率。例如,使用 csgcc 对源代码进行运行时检测,并使用 gcc 编译器生成目标文件。

注意:对于 Microsoft Visual Studio®,提供了一个额外的包装器,它直接使用 Microsoft 的 cllink(参见 Microsoft Visual Studio。)

另一种获得覆盖率的方法是向搜索路径中添加包装器目录。它包含与本地工具相同名称的编译器包装器。默认情况下,这些包装器是禁用的,但可以使用 COVERAGESCANNER_ARGS 环境变量启用它们。

调用 CoverageScanner

CoverageScanner 工作原理类似于预处理程序,在处理完源文件后调用本地编译器(Microsoft cl.exe、GNU g++ 等)。

有几种调用方法。

  1. 使用为特定编译器定制的 CoverageScanner 可执行文件:特定编译器的 CoverageScanner 可执行文件命名为 cs-<native compiler name><native compiler name-cs。例如,cl.exe 是 Microsoft C++ 编译器,相应的 CoverageScanner 可执行文件是 cscl.execl-cs.exe

    CoverageScanner 旨在像本地编译器一样工作,区别在于代码被进行了仪器检测。

    例如

    csg++ source.cpp -o application.exe
  2. 使用 CoverageScanner 编译器包装器,并通过在命令行参数中使用 --cs-on 激活仪器检测。

    Coco提供一个名为wrapper的基础编译器替代品,它扩展了命令行参数来支持代码覆盖率功能。要使用它,请将CoverageScanner wrapper的路径添加到PATH变量的第一个位置。当在命令行参数中加上--cs-on时,会激活代码插桩。

    例如

    export PATH=/opt/SquishCoco/wrapper/bin:$PATH
    g++ --cs-on source.cpp -o application.exe

    或者,不修改全局的PATH变量

    PATH=/opt/SquishCoco/wrapper/bin:$PATH g++ --cs-on source.cpp -o application.exe
  3. 使用CoverageScanner编译器wrapper,并通过COVERAGESCANNER_ARGS环境变量激活插桩

    也可以使用COVERAGESCANNER_ARGS 环境变量来设置wrapper的命令行参数。在这种情况下,不再需要修改命令行参数。

    例如

    export PATH=/opt/SquishCoco/wrapper/bin:$PATH
    export COVERAGESCANNER_ARGS='--cs-on'
    g++ source.cpp -o application.exe

    或者,对使用GNU make构建的完整项目进行插桩

    COVERAGESCANNER_ARGS='--cs-on' PATH=/opt/SquishCoco/wrapper/bin:$PATH make all
  4. 使用CoverageScanner--cs-compiler命令行选项

    --cs-compiler指定应使用哪个基础编译器。除了针对CoverageScanner特定的参数外,所有其他命令行参数都传递给基础编译器。

    例如

    coveragescanner --cs-compiler=g++ source.cpp -o application.exe

注意:基础编译器路径需要在编译器wrapper路径之后出现在PATH变量中。这是为了在插桩代码插入后找到基础编译器的位置。

编译器支持是通过一个配置文件完成的。它包含使CoverageScanner能够适应C、C++和C#预处理器、编译器和链接器的声明。有关配置文件语法的描述,请参阅CoverageScanner适应工具套件

Coco v7.2.0©2024 Qt公司有限公司。
Qt及其相关标志是芬兰和/或其他国家和地区Qt公司的商标。所有其他商标均为其各自所有者的财产。