Strumento Microsoft.CodeCoverage.Console

Microsoft.CodeCoverage.Console è uno strumento da riga di comando. È possibile usarlo per raccogliere il code coverage per il codice C++ e C#. Supporta anche l'unione e la conversione dei report di code coverage. Questo strumento può essere usato per raccogliere code coverage in scenari non di test, ad esempio per una semplice applicazione console.

Microsoft.CodeCoverage.Console è disponibile in Visual Studio 2022 17.3 nella cartella Common7\IDE\Extensions\Microsoft\CodeCoverage.Console. È possibile usarlo in un prompt dei comandi per gli sviluppatori e in powerShell per sviluppatori:

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.

Raccogliere, connettere, arrestare, unire e creare snapshot comandi

Lo strumento Microsoft.CodeCoverage.Console è l'estensione dello strumento dotnet-coverage dotnet. La documentazione per i comandi collect, connect, shutdown, merge e snapshot è disponibile qui. Inoltre, lo strumento Microsoft.CodeCoverage.Console supporta la raccolta di code coverage per il codice C++.

Comando Instrument

Il comando instrument viene usato per instrumentare file binari nativi o gestiti su disco.

Riepilogo

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>

Argomenti

  • <input-file>

    Binario di input.

Opzioni

  • -s|--settings <settings>

    Imposta il percorso delle impostazioni di code coverage XML.

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

    Specifica l'ID sessione di code coverage. Se non specificato, lo strumento genererà un GUID casuale.

  • -o|--output <output>

    Imposta il percorso del file binario di output. Se non specificato, la strumentazione verrà eseguita sul posto.

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

    Imposta il percorso del file di log. Quando si specifica una directory (con un separatore di percorso alla fine), viene generato un nuovo file di log per ogni processo sottoposto a analisi.

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

    Imposta il livello di log. Valori supportati: Error, Infoe Verbose.

Code coverage statico per il codice C++

Lo strumento Microsoft.CodeCoverage.Console può essere usato per raccogliere code coverage per C++ usando la strumentazione statica. Sono disponibili tre metodi diversi che è possibile usare. Per dimostrare, si supponga di avere una semplice applicazione console C++ (collegata con l'opzione /PROFILE):

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

Uso solo del comando collect con la configurazione

Se non si vuole usare il instrument comando , è necessario specificare i file da instrumentare in un file di configurazione come indicato di seguito:

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

È quindi possibile raccogliere il code coverage come segue:

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.

Uso di instrument e raccolta di comandi

In questo caso, il primo file binario deve essere instrumentato come segue:

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

È quindi possibile raccogliere il code coverage come segue:

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

Uso del comando instrumentare e raccogliere il comando in modalità server

In questo caso, è possibile separare completamente la raccolta di copertura dall'esecuzione dell'applicazione. Prima di tutto, instrumentare il file binario come segue:

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

Nota

L'ID sessione deve essere usato in questo scenario per assicurarsi che l'applicazione possa connettersi e fornire dati all'agente di raccolta esterno.

Nel secondo passaggio è necessario avviare l'agente di raccolta code coverage come indicato di seguito:

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

È quindi possibile avviare l'applicazione come segue:

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

Nota

Il file binario nativo instrumentato contiene un riferimento a static_covrun64.dll. Assicurarsi che questo file sia accanto al file binario instrumentato o alla directory in cui static_covrun64.dll si trova è elencato nella Path variabile di ambiente. I collect comandi e connect aggiungono automaticamente directory Path appropriate.

Infine, l'agente di raccolta può essere chiuso nel modo seguente:

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