Microsoft.CodeCoverage.Console-Tool

Microsoft.CodeCoverage.Console ist ein Befehlszeilentool. Sie können es verwenden, um Code Coverage für C++- und C#-Code zu sammeln. Es unterstützt auch das Zusammenführen und Konvertieren von Code Coverage-Berichten. Dieses Tool kann verwendet werden, um Code Coverage in Nicht-Testszenarien (z. B. für eine einfache Konsolenanwendung) zu sammeln.

Microsoft.CodeCoverage.Console ist in Visual Studio 2022 17.3 unter dem Ordner Common7\IDE\Extensions\Microsoft\CodeCoverage.Console verfügbar. Sie können es in einer Developer-Eingabeaufforderung und einer Developer-PowerShell verwenden:

Hinweis

Das Tool ist nur mit Visual Studio Enterprise verfügbar. Für .NET-Code Coverage können Sie alternativ das Befehlszeilentool dotnet-coverage verwenden.

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.

Befehle zum Erfassen, Verbinden, Herunterfahren, Zusammenführen und Momentaufnahme

Das Microsoft.CodeCoverage.Console-Tool wird auf Dotnet-Tool dotnet-coverage erweitert. Die Dokumentation zu den Befehlen zum Sammeln, Verbinden, Herunterfahren, Zusammenführen und Momentaufnahmen finden Sie hier.

Microsoft.CodeCoverage.Console unterstützt zusätzliche Sicherheitsfunktionen, um das Sammeln von ASP.NET-Codeabdeckungsdaten von IIS zu ermöglichen. Darüber hinaus unterstützt das Microsoft.CodeCoverage.Console-Tool das Sammeln von Code Coverage für C++-Code. Der instrument Befehl ist für diese Szenarien spezifisch.

Instrument-Befehl

Der instrument-Befehl wird verwendet, um native oder verwaltete Binärdateien auf dem Datenträger zu instrumentieren.

Übersicht

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>

Argumente

  • <input-file>

    Die Eingabebinärdatei.

Optionen

  • -s|--settings <settings>

    Legt den Pfad zu den XML-Code Coverage-Einstellungen fest.

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

    Gibt die Code Coverage-Sitzungs-ID an. Falls keine Angabe vorliegt, generiert das Tool eine zufällige GUID.

  • -o|--output <output>

    Legt den Pfad zur Ausgabedateibinärdatei fest. Andernfalls wird eine direkte Instrumentierung durchgeführt.

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

    Legt den Protokolldateipfad fest. Wenn Sie ein Verzeichnis (mit einem Pfadtrennzeichen am Ende) angeben, wird für jeden analysierten Prozess eine neue Protokolldatei generiert.

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

    Legt die Protokollierungsebene fest. Unterstützte Werte: Error, Info und Verbose.

Statische Code Coverage für C++-Code

Das Microsoft.CodeCoverage.Console-Tool kann verwendet werden, um Code Coverage für C++ mithilfe statischer Instrumentierung zu sammeln. Es gibt drei verschiedene Methoden, die Sie verwenden können. Nehmen wir an, wir haben eine einfache C++-Konsolenanwendung (verknüpft mit der Option /PROFILE):

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

Codeabdeckung mithilfe von Collect-Befehl mit Konfigurationsdatei

Wenn Sie den Befehl instrument nicht verwenden möchten, können Sie stattdessen eine Konfigurationsdatei verwenden, um die zu instrumentierenden Dateien wie folgt anzugeben:

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

Anschließend sammeln Sie Code Coverage wie folgt:

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.

Codeabdeckung mit Instrumenten- und Erfassungsbefehlen

Bevor Codeabdeckungsdaten gesammelt werden, instrumentieren Sie zunächst die Binärdatei wie folgt:

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

Anschließend sammeln Sie Code Coverage wie folgt:

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

Codeabdeckung mit dem Befehl „instrument” und dem Befehl „collect” im Servermodus

Mit dieser Methode können Sie die Erfassung der Codeabdeckung von der Ausführung Ihrer Anwendung trennen. Instrumentieren Sie zuerst Ihre Binärdatei wie folgt:

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

Hinweis

Die Sitzungs-ID muss in diesem Szenario verwendet werden, um sicherzustellen, dass die Anwendung eine Verbindung herstellen und Daten an den externen Collector bereitstellen kann.

Im zweiten Schritt müssen Sie den Code Coverage Collector wie folgt starten:

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

Starten Sie dann die Anwendung wie folgt:

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

Hinweis

Eine instrumentierte native Binärdatei enthält einen Verweis auf static_covrun64.dll. Stellen Sie sicher, dass sich diese Datei neben der instrumentierten Binärdatei befindet oder dass das Verzeichnis, in dem sie sich static_covrun64.dll befindet, in der Umgebungsvariable Path aufgeführt ist. Die Befehle collect und connect fügen automatisch ordnungsgemäße Verzeichnisse zu Path hinzu.

Zum Schluss schließen Sie den Collector wie folgt:

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