Microsoft.CodeCoverage.Console 工具
Microsoft.CodeCoverage.Console 是一种命令行工具。 可以使用它来收集 C++ 和 C# 代码的代码覆盖率。 它还支持合并和转换代码覆盖率报告。 此工具可用于收集非测试场景中的代码覆盖率(例如,对于简单的控制台应用程序)。
Microsoft.CodeCoverage.Console 在文件夹 Common7\IDE\Extensions\Microsoft\CodeCoverage.Console
下的 Visual Studio 2022 17.3 中提供。 可以在开发人员命令提示和开发人员 PowerShell 中使用它:
注意
此工具仅适用于 Visual Studio Enterprise。 对于 .NET 代码覆盖率,也可以使用命令行工具 dotnet-coverage。
C:\Program Files\Microsoft Visual Studio\2022\Enterprise> Microsoft.CodeCoverage.Console --help
Description:
Dynamic code coverage tools.
Usage:
codecoverage [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 binary.
收集、连接、关闭、合并和快照命令
Microsoft.CodeCoverage.Console 工具是 dotnet-coverage dotnet 工具的扩展。 可在此处找到有关收集、连接、关闭、合并和快照命令的文档。
Microsoft.CodeCoverage.Console 支持其他安全功能,以便从 IIS 收集 ASP.NET 代码覆盖率数据。 此外,Microsoft.CodeCoverage.Console 工具还支持收集 C++ 代码的代码覆盖率。 instrument
命令专门针对这些情况。
检测命令
检测命令用于检测磁盘上的本机或托管二进制文件。
摘要
Microsoft.CodeCoverage.Console instrument
[-s|--settings <settings>] [-id|--session-id <session-id>]
[-o|--output <output>] [-l|--log-file <log-file>]
[-ll|--log-level <log-level>] [-?|-h|--help]
<input-file>
自变量
<input-file>
二进制文件。
选项
-s|--settings <settings>
设置 XML 代码覆盖率设置的路径。
-id|--session-id <session-id>
指定代码覆盖率会话 ID。 如果未提供,该工具会生成随机 GUID。
-o|--output <output>
设置输出文件二进制文件的路径。 如果未提供,将就地执行检测。
-l|--log-file <log-file>
设置日志文件路径。 如果提供目录(末尾有路径分隔符),则将为分析下的每个进程生成新的日志文件。
-ll|--log-level <log-level>
设置日志级别。 受支持的值为:
Error
、Info
和Verbose
。
C++ 代码的静态代码覆盖率
可以使用 Microsoft.CodeCoverage.Console 工具通过静态检测来收集 C++ 的代码覆盖率。 可以使用三种不同的方法。 为了演示,假设我们有一个简单的 C++ 控制台应用程序(与选项 /PROFILE 链接):
D:\ConsoleApplication\x64\Debug> .\ConsoleApplication.exe
Hello World!
使用 collect 命令和配置文件的代码覆盖率
如果不想使用 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.
使用 instrument 和 collect 命令的代码覆盖率
在收集代码覆盖率数据之前,首先对二进制文件进行如下检测:
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.
在服务器模式下使用 instrument 命令和 collect 命令的代码覆盖率
使用这种方法,可以将代码覆盖率收集与运行应用程序分开。 首先,按如下所示检测二进制文件:
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
环境变量中列出。 collect
和 connect
命令会自动将适当的目录添加到 Path
。
最后,按如下方式关闭收集器:
D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console shutdown 73c34ce5-501c-4369-a4cb-04d31427d1a4