覆盖扫描器命令行参数

语法

cs<compiler> [<cs-options>] <compiler arguments>

coveragescanner --cs-compiler<STRING> [<cs-options>] <compiler arguments>

coveragescanner --cs-profile<STRING> [<cs-options>] <compiler arguments>

其中

  • <compiler> 是 Coco 支持的编译器之一。调用 cs<compiler> 将导致 CoverageScanner 作为 <compiler> 的包装器调用。
  • <cs-options> 是在下述部分中描述的一个或多个选项。
  • <compiler arguments> 是所有其他选项。当 CoverageScanner 调用编译器时,它们将被复制到编译器的命令行中。

有关 --cs-compiler--cs-profile 的用法,请参阅杂项选项

注意: 命令行参数按其在命令行中的顺序进行优先级排序。最后输入的选项比第一个选项优先级更高。例如,cscl --cs-include=foo.h --cs-exclude=foo.h 将使头文件 foo.h 从覆盖率分析中排除。

环境变量

CoverageScanner 还从环境变量 COVERAGESCANNER_ARGS 中读取选项。选项必须用空格或制表符(\t)分隔。如果存在命令行参数,并且已设置环境变量 COVERAGESCANNER_ARGS,则命令行选项优先于环境变量中的选项。

此变量只能临时设置,例如在脚本中,否则它将影响所有构建。

通过设置环境变量 SQUISHCOCO_TEMP_DIR 为另一个目录的路径来更改 CoverageScanner 生成的临时文件的位置(参见临时文件的位置)。

选项列表

覆盖率方法

有关覆盖方法的功能描述,请参阅代码覆盖分析

  • --cs-off:禁用所有代码覆盖分析。《覆盖扫描器》随后调用编译器或链接器而不做任何更改。
  • --cs-on:启用代码覆盖分析。

    这是默认设置,如果直接调用《覆盖扫描器》或作为以cs开头的包装器(如csgcc),或者包装器的名称与程序相同(例如gcc),则默认关闭代码覆盖。

  • --cs-off=<pattern>:在编译源文件时禁用所有代码覆盖分析,如果源文件的绝对文件名与通配符表达式<pattern>匹配,或者字符串<pattern>与命令行参数相同。《覆盖扫描器》随后调用编译器或链接器而不做任何更改。
  • --cs-on=<pattern>:在编译源文件时启用所有代码覆盖分析,如果源文件的绝对文件名与通配符表达式<pattern>匹配,或者字符串<pattern>与命令行参数相同。

    可以有多个--cs-on=<pattern>--cs-off=<pattern>选项。最后一个匹配的选项决定是否启用或禁用代码覆盖分析。

    注意:如果有多个源文件使用相同编译器命令编译(如C#中常见的情况),使用--cs-off=<pattern>禁用一个源文件的覆盖分析将关闭所有其他文件的覆盖分析。

  • --cs-hit:将仪器模式设置为命中仪器模式。这样,只关心是否至少执行过一次仪器点(一行、一个条件或一个块),而不关心执行了多少次。
  • --cs-count:将仪器模式设置为计数仪器模式。(默认)

    在此模式下,计算仪器点执行次数的数量。

  • --cs-statement-block:启用语句块覆盖。
  • --cs-decision:启用语句块和决策覆盖。
  • --cs-condition:启用语句块、决策和条件覆盖。(默认)
  • --cs-mcc:启用多重条件覆盖。
  • --cs-mcdc:启用MC/DC覆盖。
  • --cs-function:启用函数覆盖。(默认)
  • --cs-no-function:禁用函数覆盖仪器。
  • --cs-line:启用行覆盖。(默认)

    如果设置此选项,则自动启用决策和条件覆盖,并切换到完全仪器模式(--cs-full-instrumentation)。

  • --cs-no-line:禁用行覆盖。其他通过--cs-line自动启用的仪器模式 被禁用。
覆盖指标选项效果总结

大多数用于切换特定覆盖指标的命令行选项也会启用其他指标的数据收集。以下表格显示了哪些选项启用哪些指标。

有时,覆盖测量也受选项--cs-partial-instrumentation的影响。对于每一个选项,表格都有两行。第二行显示当存在--cs-partial-instrumentation时的情况。在表中用(+partial)标记。

函数语句决策条件MC/DCMCC
覆盖扫描器标志
--cs-statement-block
--cs-decision
--cs-decision (+partial)
--cs-condition
--cs-condition (+partial)
--cs-mcc
--cs-mcdc

调整仪器设置

  • --cs-exclude-files-without-instrumentation:排除分析时没有任何代码被 instrumentation 的源文件。
  • --cs-constexpr}=optionoption可以有以下之一
    • ignore:忽略constexpr函数的instrumentation。
    • full:即使目标应用程序不包含生成的代码,也要instrument所有constexpr函数。这需要支持C++20标准的编译器。
    • runtime:仅instrument在目标应用程序中生成的constexpr函数。这需要支持C++20标准的编译器。
  • --cs-no-exceptions:不要instrument try...catch 语句的 catch 块。
  • --cs-no-assignments:不要在赋值语句中instrument布尔表达式。
  • --cs-no-command-line-analysis:禁用编译命令行分析。
  • --cs-no-execution-time:禁用使用应用程序的性能测量来instrument。(默认情况下,启用执行时间测量。)
  • --cs-execution-time:启用使用应用程序的性能测量来instrument。
  • --cs-no-function-profiler:禁用Coco分析器。
  • --cs-function-profiler=option:启用Coco分析器。option可以有以下之一
    • all:instrument所有函数。
    • skip-trivial:禁用对于只有一个语句的函数的Coco分析器。

    注意:函数分析目前仅在某些平台上可行。

  • --cs-no-returns:不要在返回语句中instrument布尔表达式。
  • --cs-combine-switch-cases:使用此选项,决策覆盖和条件覆盖不会区分导致相同代码的CASE标签。这意味着在以下代码中,CASE i == 3i == 4 不会被区分。如果未设置此选项,这两个CASE将被单独计数。
    switch (i) {
        case 3:
        case 4:
           i = 0;
           break;
        ...
    }

    此选项适用于C/C++和C#。

  • --cs-partial-instrumentation:抑制冗余条件。设置此选项还会禁用行覆盖率。

    此选项会影响没有else部分的if语句的instrumentation。

    if (cond) {
        i += 1;
    }

    未设置选项时,会创建一个不可见的else分支,并测量其覆盖率。如果设置此选项,则不再这样做,并且不会测量cond为假的情况的覆盖率。这时,instrumented代码将略微减小,这在小型嵌入式系统中可能是必要的。

  • --cs-full-instrumentation:不抑制冗余条件。(默认启用)
  • --cs-boost:对Boost库结构进行特定处理。目前这意味着宏BOOST_FOREACH后面的代码不会被instrument。(默认启用。)
  • --cs-no-boost:不对Boost库结构进行特定处理。
  • --cs-qt4:对于Qt4、Qt5和Qt6库(Q_OBJECTqt_metacallqt_metacast等)使用moc生成的类成员不进行instrumentation。宏Q_FOREACH后面的代码也保持不instrument。Qt信号仍然进行instrumentation。(默认启用。)
  • --cs-no-qt4:不对Qt4和Qt5库进行特定处理。
  • --cs-qt3:对于Qt3库使用moc生成的类成员不进行instrumentation。Qt信号仍然进行instrumentation。(默认启用。)
  • --cs-no-qt3:不特定处理 Qt3 库。
  • --cs-no-annotations:不从源文件中提取注释(注释和手动验证)。
  • --cs-no-purecov-annotations:不从源文件中提取 purecov 的注释。
  • --cs-disable-rvalue-support:对于不支持右值的编译器,禁用使用的仪器。
  • --cs-vs2010-lambda:对 lambda 函数的 return 语句中的表达式进行仪器的设置。

    这提高了 Microsoft® Visual Studio® 2010 中 lambda 表达式的支持度。此选项仅适用于 C++11 编译器和 Visual Studio 2010。使用 C 编译器或较旧的 C++ 编译器,此选项不起作用。

  • --cs-unique-ptr-namespace=<string>:为 std::unique_ptr 模板指定特定名称空间。如果设置为字符串 XXX,则假定唯一指针的实现位于类 std::XXX::unique_ptr 中。
  • --cs-unique-ptr-namespace-inline:应设置如果标准 C++ 标准头文件使用内联名称空间来声明智能指针
  • --cs-unique-ptr-namespace-not-inline--cs-unique-ptr-namespace-inline 的相反设置。
  • --cs-shared-ptr-namespace=<string>:为 std::shared_ptr 模板指定特定名称空间。如果设置为字符串 XXX,则假定共享指针的实现位于类 std::XXX::shared_ptr 中。
  • --cs-shared-ptr-namespace-inline:如果标准 C++ 标准头文件使用内联名称空间声明智能指针,则应该设置此选项。
  • --cs-shared-ptr-namespace-not-inline--cs-shared-ptr-namespace-inline的反向设置。
  • --cs-exit-function=<function>:将 <function> 声明为退出函数的名称。

    退出函数是结束函数中的控制流的命令,例如返回语句或调用 exit() 函数,或者总是抛出异常的函数。然后,在这种语句之后的任何代码都不可达。使用此选项,可以告知 Coco 有用户定义的函数具有与 exit() 相同的效果。

    可以重复此选项;则声明多个退出函数。

  • --cs-no-line-directive:从由预处理程序生成的 C++ 和 C# 的代码中移除所有 #line 指令。

    CoverageScanner 仪器化文件之前调用预处理程序;然后调用原始编译器。在某些系统中,以这种方式编译文件会导致在某些情况下出现直接调用编译器时不出现的问题。有时删除#line语句会很有帮助。

  • --cs-counter-size=<int>:内部执行计数器的尺寸。可能的值是 1(字节)、4(32位整数)或 8(64位整数)。计数器用于仪器化的程序内部,以计算仪器化点的执行次数。大的内部计数器可以防止计数器溢出,在小型嵌入式系统中可能需要更小的计数器以节省空间。默认值为 8。
  • --cs-mcc-max=<size> | --cs-mcdc-max=<size>:设置用于多重条件覆盖或 MC/DC 的仪器表的最大尺寸。默认的 <size> 为 8000。

    对于每个决策,都在多重条件覆盖和 MC/DC 下生成一个真值表。 <size> 是表中行数的最大值。如果一个决策需要一个比 <size> 更长的真值表,则 Coco 将回退到该决策的条件覆盖。

文件和路径包含

以下选项用于指定哪些文件包含在代码覆盖率中。这些选项适用于命令行中的文件以及由 #include 语句指定的文件。

可以使用通配符和正则表达式。与常规用法不同,通配符表达式中的 * 匹配路径分隔符。正则表达式的语法在第 (正则表达式 节) 中描述。

选项累积。如果存在多个文件包含/排除选项,则最后匹配给定文件的那个选项确定它是否包含或排除。

在以下选项中,首先将相关文件的名称转换为绝对路径。

  • --cs-include-file-abs-wildcard=<pattern>:如果文件的绝对路径与通配符表达式 <pattern> 匹配,则将其包含在覆盖率分析中。
  • --cs-exclude-file-abs-wildcard=<pattern>:如果文件的绝对路径与通配符表达式 <pattern> 匹配,则将其从覆盖率分析中排除。

    例如,使用 --cs-exclude-file-abs-wildcard=*.h 排除所有扩展名为 .h 的文件。

  • --cs-include-file-abs-regex=<pattern>:如果文件的绝对路径与正则表达式 <pattern> 匹配,则将其包含在覆盖率分析中。
  • --cs-exclude-file-abs-regex=<pattern>:如果文件的绝对路径与正则表达式 <pattern> 匹配,则将其从覆盖率分析中排除。

    例如,使用 --cs-exclude-file-abs-regex=^.*\.h$ 排除所有扩展名为 .h 的文件。

  • --cs-include-path=<path>:将目录 <path> 以及其子目录中的所有文件包含在覆盖率分析中。不允许使用通配符或正则表达式。

    例如,使用 --cs-include-path=c:\include 包含位于 c:\include 的所有文件。

  • --cs-exclude-path=<path>:将目录 <path> 以及其子目录中的所有文件从覆盖率分析中排除。不允许使用通配符或正则表达式。

    例如,使用 --cs-exclude-path=c:\include 排除位于 c:\include 及其子目录中的所有文件。

复杂包含模式的示例

  • --cs-exclude-file-abs-wildcard=* --cs-include-file-abs-wildcard=*.cpp 仅针对 .cpp 文件进行工具化。
  • --cs-exclude-file-abs-wildcard=* --cs-include-file-abs-wildcard=*.cpp --cs-include-file-abs-wildcard=*.cxx 仅针对 .cpp.cxx 文件进行工具化。
  • --cs-exclude-file-abs-wildcard=*\/3rdparty/* 不针对目录 3rdparty 中的任何文件进行工具化。
  • --cs-exclude-file-abs-wildcard=*\/3rdparty/* --cs-include-file-abs-wildcard=* 工具化所有文件:第一个过滤器规则没有效果。

函数包含

  • --cs-include-function-wildcard=<string>:此命令行选项允许用户将函数包含在覆盖率分析中。使用通配符表达式指定函数名称,对于 C++ 代码,必须包含类名和命名空间。

    例如,使用 --cs-include-function-wildcard=C::* 包含类 C 的所有成员。

  • --cs-exclude-function-wildcard=<string>:此命令行选项允许用户将函数从覆盖率分析中排除。使用通配符表达式指定函数名称,对于 C++ 代码,必须包含类名和命名空间。

    例如,使用 --cs-exclude-function-wildcard*::Get* 排除所有以 Get 开头的类的成员。

  • --cs-include-function-regex=<string>:此命令行选项允许用户将函数包含在覆盖率分析中。使用正则表达式指定函数名称,对于 C++ 代码,必须包含类名和命名空间。关于语法,请参阅 正则表达式
  • --cs-exclude-function-regex=<string>:此命令行选项允许用户从覆盖率分析中排除一个函数。函数名称使用正则表达式指定,对于C++代码,必须包含类名和命名空间。有关语法,请参阅正则表达式

如果存在多个这些包含/排除选项,则最后一个与给定函数匹配的选项决定它是包含还是排除。

以下选项独立于前面的选项

  • --cs-record-empty-functions:启用对空主体函数的仪器化。(默认情况下,此功能已被禁用。)

调试

  • --cs-verbose-source-lines=<int>:打印在错误消息中的源代码行附近的上下文行数。

    当源代码作为错误消息或警告的一部分打印时,则此标志设置在打印之前和之后的行数作为其上下文。默认值为3。

  • --cs-verbose=<string>:生成详细调试消息。可能选项包括
    • cmd:在构建过程中,CoverageScanner显示它执行的程序的命令行参数。这包括在将仪器化源代码转换为原始源代码时编译器的命令行参数。
    • build:在构建过程中,CoverageScanner的仪器化被跟踪。例如,它包括有关文件是否被仪器化以及哪些文件被排除在仪器化之外的信息。

      此选项自动意味着--cs-verbose=cmd

    • api:在运行仪器化程序时,跟踪对CoverageScanner库的调用。

    请注意,这些选项也可以组合使用。例如,--cs-verbose=build --cs-verbose=api将生成在仪器化时产生的构建文件,以及在执行仪器化程序时跟踪的日志。

    默认情况下,输出写入stderr

  • --cs-verbose-file=<file>:定义当运行仪器化程序时用于生成CoverageScanner日志文件的文件。如果未使用--cs-verbose=api,则此选项没有效果。
  • --cs-keep-instrumentation-files:不要删除临时仪器化文件。它们将留下随机名称在Coco临时目录下(参见临时文件的存储位置)。
  • --cs-warnings=<string>:仪器化警告行为
    • none:将不会显示警告。
    • display:警告将通过stderr显示。
    • error:警告将触发编译错误。
  • --cs-compilation-warnings=<string>:编译警告行为
    • none:将不会显示警告。
    • display:警告将通过stderr显示。
    • error:警告将触发编译错误。
  • --cs-annotation-warnings=<string>:源代码注释警告行为
    • none:将不会显示警告。
    • display:警告将通过stderr显示。
    • error:警告将触发编译错误。
  • --cs-compiler-retry=<integer>:编译重试的次数。这可能是在某些文件系统上生成的对象可能被临时锁定时必要的。

执行报告

  • --cs-output=<string>:设置执行报告的文件名。将自动添加扩展名.csexe

    默认情况下,<string>的值是%F,并且CoverageScanner使用应用程序名称(不带路径)作为.csexe文件的名称。

    teşekkür <string> değerinin bir absolu yol olabilr, örneğin /my/dir/%F. Bu yoldaki dizinler, <CoverageScanner> ön tanımlı olarak oluşturmadığı için bu programın çalıştığında zaten mevcut olmalıdır.

    Not: Bu davranış, kullanıcı kendi çıktı fonksiyonlarını sağladığında değişebilir. <__coveragescanner_set_custom_io>()(<library-calls.html#sec-cpp-set-custom-io>) ve <CoverageScanner.__coveragescanner_set_custom_io>(<library-calls.html#sec-cs-set-custom-io>) bakınız.

    Aksi takdirde, <string> bir programa başlama anındaki işletim dizinine göre relatifi bir yol olarak yorumlanır.

    <string> birden fazla format belirteci içerebilir. Aşağıdaki belirteçlerin değerleri derleme sırasında hesaplanır.

    • %T: Mevcut yerel saat bir tamsayı olarak. (Örneğin: 163355 16h33 ve 55s için)
    • %D: Mevcut yerel tarih bir tamsayı olarak. (Örneğin: 20140130 Ocak 30, 2014 için)
    • %F: Yola tabi olmayan uygulama/kütüphane adı.
    • %A: Absolu uygulama/kütüphane adı.
    • %B: Yola ve uzantısız uygulama/kütüphane adı.
    • %P: Uygulama/kütüphane dosya yolu.
    • %/: Dosya yol ayracı (Unix'te bir çizgi, /, ve Windows'ta geri nokta, \).

    Aşağıdaki format belirteçlerinin değerleri çalışma sırasında hesaplanır.

    • %c: Mevcut çalışma dizini. Değer, main() fonksiyonu başlamadan önce hesaplanır. Mevcut çalışma dizini değiştiğinde, bu yol benzer kalır.
    • %p: Süreç kimliği. Eğer herhangi bir nedenle hesaplanamazsa, %p bir boş string ile değiştirilir.
    • %t: Mevcut yerel saat. Eğer herhangi bir nedenle hesaplanamazsa, %t bir boş string ile değiştirilir.
    • %d: Mevcut yerel tarih. Eğer herhangi bir nedenle hesaplanamazsa, %d bir boş string ile değiştirilir.
    • <X>: X ortam değişkeninin içerik Doctor-X.
  • --cs-file-name-format-specifier: Dosya format belirteç desteğini etkinleştirir.
  • --cs-no-file-name-format-specifier: Dosya format belirteç desteğini devre dışı bırakır.
  • --cs-lock-csexe: Oluşturma sırasında .csexe dosyasına erişimi kilitleyen bir kilitleme dosyası oluşturur. Uygulama (AUT) exec() çalışmadan fork()_THRESHOLD eğer, çocuğun birbirlerinin kapsamlılık verilerini yok etmesini önlemek için kullanışlıです.
  • --cs-nolock-csexe: <--cs-lock-csexe> ters seçenek. Ön işleyici çıktısı geçici bir dosya yolu üzerinden <CoverageScanner> ile iletilir. < cs-dump-on-signal >
  • --cs-dump-on-signal=<signal>: Belirli bir sinyal alınırken bir çalışma raporu oluşturur. Sinyal, 1'den 63'e kadar bir numara veya geleneksel sinyal adı (örneğin, SIGINT, SIGTERM vb.) olabilir. < Execution report generation with UNIX® signals > bakınız. < cs-dump-on-event >
  • --cs-dump-on-event=<string>: Belirli bir Microsoft Windows olayı alınırken bir çalışma raporu oluşturur (SqlCommand Execution report variation with Microsoft Windows events). < Execution report generation with Microsoft Windows events > bakınız. < custom-trigger-function >
  • --cs-trigger-function=<triggerfunction>: <triggerfunction> çağrısının her sonunda kapsamlılık verilerini kaydeder. Bu anahtar kelime, birden fazla tetikleyici fonksiyonun işlenmesi için birden fazla kez tekrarlanabilir.

    使用 <function> 根据C++约定指定。这意味着 A::foo 代表的函数是 A 命名空间或类中的 foo 函数。默认情况下,在 <triggerfunction> 运行后调用的保存函数是 __coveragescanner_save(),但可以使用以下选项进行更改。

  • --cs-coverage-save-function=<savefunction>:设置由 --cs-trigger-function 插入的自定义函数。

    <savefunction> 必须是一个无参数的函数,因为它代替了 __coveragescanner_save()。Coco会在每个源文件的开头自动插入 <savefunction> 的声明。这使得可以在使用 --cs-custom-library-source 编译的文件中定义 <savefunction>(参见生成的代码)。

命令行修改

  • --cs-compiler-option=<option>:在编译已插入代码时,将 <option> 添加到编译器命令行的末尾。当禁用代码覆盖率时,不会发生任何操作。如果需要多个选项,则可以重复此选项。
  • --cs-remove-arg=<sep><filter><sep><arg1><sep><arg2>:从编译器/链接器命令行中删除命令行参数。 <sep> 是用作表达式分隔符的字符。 <filter> 是一个正则表达式,用于匹配一个参数。如果其中之一与过滤器匹配,则应用注入。从 ! 开始,正则表达式被反转。<arg1> 和可选的 <arg2> 是匹配命令行参数的正则表达式。

    示例

    • –cs-remove-arg=/.*/-g:从所有命令行中删除 -g.* 匹配每个参数)。
    • –cs-remove-arg=/-c/-D/TEST=.*:从所有编译命令行中删除 -DTEST=1-DTEST=3-c 匹配编译源代码的命令行)。
    • –cs-remove-arg=/!-c/-O[0-3]:从所有非编译命令行中删除 -O0-O3
  • --cs-inject-arg=<sep><filter><sep><arg1><sep><arg2>:向编译器/链接器命令行中注入命令行参数。 <sep> 是用作表达式分隔符的字符。<filter> 是一个正则表达式,用于匹配一个参数。如果其中之一与过滤器匹配,则应用注入。从 ! 开始,正则表达式被反转。<arg1> 和可选的 <arg2> 是注入的参数。

    示例

    • –cs-inject-arg=/.*/-g:向所有命令行中注入 -g.* 匹配每个参数)。
    • –cs-inject-arg=/-c/-D/TEST=1:向所有编译命令行中注入 -D TEST=1-c 匹配编译源代码的命令行)。
    • –cs-inject-arg=/!-c/-lfoo:向所有非编译命令行中注入 -lfoo
  • --cs-libgen=<option>:将额外的命令行选项添加到生成代码覆盖率库的编译调用中。如果需要多个选项,则可以重复此选项。

    选项被追加并成为变量 $LIBGEN$ 的内容,该变量可能出现在配置选项 COMPILER_CMD 的替换文本中(参见链接器设置配置参数)。

  • --cs-library-after=<option>:将指定选项后面的链接器参数用于 CoverageScanner 库。

    当以 --cs-library-after=-lmylib 的形式使用时,CoverageScanner 库的链接器参数将直接插入到选项 -lmylib 之后。

  • --cs-library-at-start:将 CoverageScanner 库的链接器参数添加到所有其他命令行选项之前。
  • --cs-library-at-end:将 CoverageScanner 库的链接器参数添加到所有其他命令行选项之后。

生成的代码

  • --cs-no-csharp-dynamic:如果设置,C# 的 dynamic 类型不会在 Coco 生成的仪器代码中使用。

    使用 dynamic 类型,Coco 可以更好地处理包含非布尔对象的布尔表达式,这些对象具有重载的 truefalse 函数。但是,动态类型仅在 Visual Studio 2010 及以上版本中可用;对于更早的 C# 版本,需要此选项。

  • --cs-csharp-dynamic:如果设置,C# 的 dynamic 类型将在 Coco 生成的仪器代码中使用。
  • --cs-enable-coveragescanner-library-abs-wildcard=<string>:在生成的二进制的绝对文件名与给定的通配符表达式匹配时,启用 CoverageScanner 库的生成。
  • --cs-disable-coveragescanner-library-abs-wildcard=<string>:在生成的二进制的绝对文件名与给定的通配符表达式匹配时,禁用 CoverageScanner 库的生成。
  • --cs-pointer-type=<string>:可以用来将指针转换为整数的类型。这可能取决于目标平台是 intlong long
  • --cs-memory-pool=<int>:生成一个使用字节数组内存池而不是调用 malloc()/free()CoverageScanner 库。池的大小为 <int> 字节。此选项仅适用于不支持动态内存分配的操作系统。
  • --cs-memory-pool-code=<string>:内存池的声明代码。这是可选的,允许对 CoverageScanner 库使用的数组头进行自定义声明。默认实现是一个以以下方式声明的静态字符数组:static char %S[%I]。以下占位符可用:
    • %S:自定义堆的符号名称。
    • %I:堆的大小(以字节为单位)。
  • --cs-memory-alloc-failure-function=<string>:当 malloc() 调用失败时调用的 C 函数名。函数的原型应为 void func(int size),并且函数不应返回。参数 size 是作为 malloc() 函数参数传递的请求内存大小。这允许您通过自定义函数捕获 CoverageScanner 代码的内存不足问题。
  • --cs-link-instrumentation-tables:在链接时而不是在运行时链接所有仪器表。(这是默认的。)

    仪器表是由 Coco 生成的内部数组,包含代码覆盖的计数变量。

  • --cs-register-instrumentation-tables:在运行时而不是在链接时链接所有仪器表。此选项仅对具有配置参数 INSTRUMENTATION_TABLES_LINKED_DURING_RUNTIME_SUPPORT(见 链接器设置的配置参数)值为 Yes 的平台有效。
  • --cs-dotnet-exit-handler:对 .NET Core 退出的特定处理。这使得您即使调用 Environment.Exit 也能保存执行报告。
  • --cs-no-exit-handler-installation:禁用自动安装保存代码覆盖率报告的处理程序。如果未安装此处理程序,则在应用程序退出或收到自定义信号或 Windows 事件时不会生成执行报告。通过调用 __coveragescanner_install() 手动安装处理程序。
  • --cs-minimal-api:使用此命令行选项,生成一个相对于默认 API 对外部库依赖较少的 CoverageScanner API。这可能对于嵌入式系统或在带有命令行开关 /noconfig 编译 C# 应用程序时是必要的。
  • --cs-custom-library-source=<文件>:将 <文件> 编译为附加源。然后将 <文件> 的目标代码链接到程序的代码中。

    此选项仅对 C 或 C++ 程序的检测有效。因此,<文件> 中的代码必须使用相同的语言编写。

    这是为了在不更改程序源代码的情况下,将较大的代码段包含到被检测程序中。结果是程序中的代码可以使用 <文件> 中定义的函数。但请注意,新的函数仍然需要在使用它们的源文件中进行声明。

    当使用 <文件> 定义由 --cs-coverage-save-function=<triggerfunction>(请参阅 生成代码)设置的 <savefunction> 时,不需要显式声明。

其他

  • --cs-compiler=<字符串>:此命令选项允许用户选择配置文件。通常不需要指定此选项,因为配置文件名通常是从命令行名称中提取的。cscl.exe 隐式选择配置文件 cl.cspro

    例如,--cs-compiler=cl 选择配置文件 cl.cspro

  • --cs-profile=<字符串>:此选项设置 CoverageScanner 配置文件的路径。使用此选项与 --cs-compiler 不兼容。

    例如,--cs-profile=%SQUISHCOCO%\cl.cspro 在 Windows 上相当于 --cs-compiler=cl

  • --cs-architecture=<字符串>:指定目标架构的内部选项。它设置配置参数 PREPROCESSOR_CMD 替换文本中的变量 $ARCHITECTURE$(请参阅 配置参数用于预处理器设置)。目标架构还用于选择备用配置参数(请参阅 CoverageScanner 对工具套件的适应)。
  • --cs-parallel-build=<整数>:并发代码生成/编译的最大数量。
  • --cs-cpp-ext=<列表>:与 C++ 文件对应的文件扩展名列表(例如:.cpp,.cxx)
  • --cs-c-ext=<列表>:与 C 文件对应的文件扩展名列表(例如:.c)
  • --cs-obj-ext=<列表>:与对象文件对应的文件扩展名列表(例如:.o,.obj)
  • --cs-native-toolchain=<字符串>:将目录添加到本地编译器的搜索路径。此命令可以重复。在这种情况下,第一个位置是首选位置。
  • --cs-option-file=<文件>:从文件指定命令行选项。该文件可能包含所有有效的 CoverageScanner 命令行选项和本地工具的命令行选项。每行必须包含一个参数。删除前导和尾随空白,忽略空行,但不进行其他输入处理。此选项可以重复。
  • --cs-file-name-lower-case:将绝对文件名转换为小写。为了与第 4.1 版本向后兼容。
  • --cs-no-pch:如果设置,则在编译期间会禁用预编译头。
  • --cs-no-pch=<模式>:当编译与通配符表达式 <模式> 匹配的绝对文件名时,禁用预编译头的使用,或者如果 <模式> 字符串与命令行参数完全相同。
  • --cs-no-cspch:如果设置,则不会生成扩展名为 .cspch 的文件。这些文件只在使用预编译头时用于提高编译速度。
  • --cs-squish: 启用自动 Squish 集成。(默认)。
  • --cs-no-squish: 禁用自动 Squish 集成。

预处理器符号作为命令行标志的替代

控制封装的另一种方法是定义某些预处理器符号。这使得即使在 IDE 不允许额外的命令行选项的情况下也能对代码进行封装。例如,可以定义符号 COVERAGESCANNER_COVERAGE_ON,它等同于使用命令行标志 --cs-on。必须为应封装的每个文件定义这些符号。

预处理器符号等价
COVERAGESCANNER_RUNTIME_LOG--cs-verbose=api
COVERAGESCANNER_KEEP_INSTRUMENTATION_FILES--cs-keep-instrumentation-files
COVERAGESCANNER_VERBOSE--cs-verbose=build
COVERAGESCANNER_DUMP_ON_EVENT--cs-dump-on-event=Global\COVERAGE
COVERAGESCANNER_COVERAGE_ON--cs-on
COVERAGESCANNER_COVERAGE_OFF--cs-off
COVERAGESCANNER_COVERAGE_HIT--cs-hit
COVERAGESCANNER_COVERAGE_COUNT--cs-count
COVERAGESCANNER_COVERAGE_BASIC_BLOCK--cs-statement-block
COVERAGESCANNER_COVERAGE_DECISION--cs-decision
COVERAGESCANNER_COVERAGE_CONDITION--cs-condition
COVERAGESCANNER_COVERAGE_MCC--cs-mcc
COVERAGESCANNER_NO_CSHARP_DYNAMIC--cs-no-csharp-dynamic
COVERAGESCANNER_NO_LINEDIRECTIVE--cs-no-linedirective
COVERAGESCANNER_CSHARP_DYNAMIC--cs-csharp-dynamic
COVERAGESCANNER_COVERAGE_LOCK_CSEXE--cs-lock-csexe
COVERAGESCANNER_COVERAGE_NOLOCK_CSEXE--cs-nolock-csexe
COVERAGESCANNER_COVERAGE_PARTIAL_INSTRUMENTATION--cs-partial-instrumentation
COVERAGESCANNER_COVERAGE_FULL_INSTRUMENTATION--cs-full-instrumentation
COVERAGESCANNER_COVERAGE_NO_EXCEPTIONS--cs-no-exceptions
COVERAGESCANNER_COVERAGE_NO_ASSIGNMENTS--cs-no-assignments
COVERAGESCANNER_MINIMAL_API--cs-minimal-api
COVERAGESCANNER_COVERAGE_COMBINE_SWITCH_CASES--cs-combine-switch-cases
COVERAGESCANNER_OUTPUT_ABS--cs-output=Global\%A
COVERAGESCANNER_PROFILER_ALL--cs-function-profiler=all
COVERAGESCANNER_PROFILER_SKIP_TRIVIAL--cs-function-profiler=skip-trivial
COVERAGESCANNER_DOTNET_EXIT_HANDLER--cs-dotnet-exit-handler

正则表达式

正则表达式由项目和组合运算符组成。这些可以是

  • [...]: 中括号用来定义一组字符。例如,[123] 对应字符 123。可以使用连字符定义范围:[a-z] 对应于 az 之间的所有字符。
  • [^...]: 破折号定义不应匹配的一组字符。例如,[^0-9] 对应于除数字之外的所有字符。
  • ?: 正则表达式项后的问号使其可选。例如,ab? 匹配字符串 aab
  • *: 正则表达式项后的加号可以使该表达式可重复。例如,ab+ 匹配所有字符串 ab...b
  • *: 正则表达式项后的星号意味着该表达式是可选的,并且可以重复。例如,ab* 匹配所有字符串 ab...ba
  • *: 管道运算符指定一个替代项。例如,a|b 匹配字符 ab
  • *: 括号将表达式分组为子表达式。例如,(true)|(false) 匹配字符串 truefalse
  • 正则表达式项:正则表达式项是ASCII或魔法字符。如果需要将魔法字符用作ASCII字符,它必须用反斜杠(\)转义。
元素描述等价反向元素
^脱字号标记字符串的开始。例如,^c:只会匹配驱动器C:上的绝对路径文件名。如果您想匹配字面上的^,您必须通过写入\^来转义它。
$美元符号标记字符串的结束。例如\.cpp$将匹配所有的C++文件名。如果您想匹配字面上的$,您必须通过写入\$来转义它。
\<匹配单词的开始。
\>匹配单词的结束。
.任何字符
\转义字符。例如,\.对应于字符.,而不是任何字符
\m字母数字字符[0-9a-zA-Z]\M
\a字母字符[a-zA-Z]\A
\b空白字符[\t]\B
\c控制字符\C
\d数字[0-9]\D
\g除空格外的可打印字符[]\G
\l小写字母[a-z]\L
\p可打印字符\P
\n除空格和外文字母数字外的可打印字符\N
\s空白字符(空格,换页,换行,回车,水平制表符和垂直制表符)[\f\n\r\t\v]\S
\u大写字母[A-Z]\U
\x十六进制数字[0-9a-fA-F]\X

Coco v7.2.0©2024 The Qt Company Ltd.
Qt及其相关标志是Finland和/或其他国家的商标。所有其他商标均为各自所有者的财产。