Microsoft.CodeCoverage.Console 工具
Microsoft.CodeCoverage.Console 是命令列工具。 您可使用該工具來收集 C++ 和 C# 程式碼的程式碼涵蓋範圍。 其也支援合併和轉換程式碼涵蓋範圍報告。 此工具可用於在非測試案例中收集程式碼涵蓋範圍 (例如,針對簡單的主控台應用程式)。
Microsoft.CodeCoverage.Console 位於 Visual Studio 2022 17.3 的 Common7\IDE\Extensions\Microsoft\CodeCoverage.Console
資料夾之下。 您可以在開發人員命令提示字元和開發人員 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 dotne 工具的延伸模組。 這裡可找到 collect、connect、shutdown、merge 和 snapshot 命令的說明文件。
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>
指定程式碼涵蓋範圍工作階段識別碼。 如果未提供,此工具會產生隨機 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.
注意
此案例需要使用工作階段識別碼,以確保應用程式可以連線並提供資料給外部收集器。
在第二個步驟中,您必須啟動程式碼涵蓋範圍收集器,如下所示:
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