Microsoft.CodeCoverage.Console 工具

Microsoft.CodeCoverage.Console 是一种命令行工具,可用于收集C++和 C# 代码的代码覆盖率。 它还支持合并和转换代码覆盖率报告。 此工具可用于在非测试方案中收集代码覆盖率(例如,对于简单的控制台应用程序)。

此工具是 dotnet-coverage dotnet 工具的扩展,添加了对以下场景的支持:

  • 添加安全特性以支持从 IIS 收集 ASP.NET 代码覆盖率数据。
  • 收集 C++ 代码的代码覆盖率。

说明

该工具仅适用于 Visual Studio Enterprise。 对于 .NET 代码覆盖率,也可以使用命令行工具 dotnet-coverage

Microsoft.CodeCoverage.Console 位于文件夹 Common7\IDE\Extensions\Microsoft\CodeCoverage.Console下的 Visual Studio 2022 17.3 中。 可以在开发人员命令提示符和开发人员 PowerShell 中使用它:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console --help

Description:
  Code coverage tools.

Usage:
  Microsoft.CodeCoverage.Console [command] [options]

Options:
  --version       Show version information
  -?, -h, --help  Show help and usage information

Commands:
  collect <command> <args>            Collect code coverage from inner process and subprocesses.
  connect <session> <command> <args>  Connects to an existing code coverage session and collects code coverage from
                                      inner process and subprocesses.
  merge <files>                       Merge coverage reports
  shutdown <session>                  Close existing code coverage collection.
  snapshot <session>                  Creates coverage file for existing code coverage collection.
  instrument <input-file>             Instruments native and managed binary.
  uninstrument <input-file>           Restore original binary.

收集、连接、关闭、合并、快照和取消检测命令

Microsoft.CodeCoverage.Console 工具是 dotnet-coverage dotnet 工具的扩展。 有关收集、连接、关闭、合并、快照和取消检测命令的文档,请查看此文

Microsoft.CodeCoverage.Console 支持其他安全功能,以便从 IIS 收集 ASP.NET 代码覆盖率数据。 此外,Microsoft.CodeCoverage.Console 工具还支持收集C++代码的代码覆盖率。 instrument 命令特定于这些方案。

仪器指令

检测命令用于检测磁盘上的本机或托管二进制文件。

概要

Microsoft.CodeCoverage.Console instrument
    <input-file>
    [-s|--settings <settings>] [-id|--session-id <session-id>]
    [-o|--output <output>]
    [-l|--log-file <log-file>] [-ll|--log-level <log-level>]
    [-dco|--disable-console-output] [--nologo]
    [-?|-h|--help]

自变量

  • <input-file>

    二进制文件。

选项

  • -s|--settings <settings>

    设置 XML 代码覆盖率设置的路径。 设置文件可用于从代码覆盖率分析中排除某些模块或方法。 格式与 .runsettings 文件中的数据收集器配置相同。 有关详细信息,请参阅 自定义代码覆盖率分析

  • -id|--session-id <session-id>

    指定代码覆盖率会话 ID。 如果未提供,则该工具生成随机 GUID。

  • -o|--output <output>

    设置输出二进制文件的路径。 如果未提供,将就地执行检测。

  • -l|--log-file <log-file>

    设置日志文件路径。 提供目录(末尾有路径分隔符)时,将为分析中的每个进程生成一个新的日志文件。

  • -ll|--log-level <log-level>

    设置日志级别。 支持的值:ErrorInfoVerbose

  • -dco|--disable-console-output

    禁用控制台输出。

  • --nologo

    不显示代码覆盖率横幅。

C++代码的静态代码覆盖率

Microsoft.CodeCoverage.Console 工具可用于使用静态检测收集C++的代码覆盖率。 可以使用三种不同的方法。 为了演示,假设我们有一个简单的C++控制台应用程序(与选项 /PROFILE链接):

D:\ConsoleApplication\x64\Debug> .\ConsoleApplication.exe
Hello World!

将 collect 命令与配置文件配合使用的代码覆盖率(C++)

如果不想使用 instrument 命令,则可以改用配置文件指定要检测的文件,如下所示:

<ModulePaths>
  <IncludeDirectories>
    <Directory>D:\ConsoleApplication\x64\Debug</Directory>
  </IncludeDirectories>
</ModulePaths>

然后,按如下所示收集代码覆盖率:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console collect --settings coverage.config .\ConsoleApplication.exe
SessionId: 85d9d49e-38a7-43a4-81ff-9e12f0e6b04b
Hello World!
Code coverage results: output.coverage.

设置文件可用于从代码覆盖率分析中排除某些模块或方法。 格式与 .runsettings 文件中的数据收集器配置相同。 有关详细信息,请参阅 自定义代码覆盖率分析

使用检测和收集命令获取代码覆盖率 (C++)

在收集代码覆盖率数据之前,请先检测二进制文件,如下所示:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console instrument ConsoleApplication.exe
Input file successfully instrumented.

然后,按如下所示收集代码覆盖率:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console collect .\ConsoleApplication.exe
SessionId: e85e657f-9ff3-42a0-88d7-2349598a1ecd
Hello World!
Code coverage results: output.coverage.

在服务器模式下使用检测命令和收集命令来获取代码覆盖率 (C++)

使用此方法,可以将代码覆盖率集合与运行应用程序分开。 首先,按如下所示检测二进制文件:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console instrument --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 ConsoleApplication.exe
Input file successfully instrumented.

备注

此方案中需要使用会话 ID,以确保应用程序可以连接并向外部收集器提供数据。

第二步中,需要启动代码覆盖率收集器,如下所示:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console collect --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 --server-mode
SessionId: 73c34ce5-501c-4369-a4cb-04d31427d1a4

然后,按如下所示启动应用程序:

D:\ConsoleApplication\x64\Debug>.\ConsoleApplication.exe
Hello World!

备注

检测的本机二进制文件包含对 static_covrun64.dll 的引用。 请确保此文件位于带有检测功能的二进制文件旁边,或 static_covrun64.dll 所在的目录已在 Path 环境变量中列出。 collectconnect 命令会自动向 Path 添加正确的目录。

最后,关闭收集器,如下所示:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console shutdown 73c34ce5-501c-4369-a4cb-04d31427d1a4