Поделиться через


Инструмент Microsoft.CodeCoverage.Console

Microsoft.CodeCoverage.Console — это средство командной строки, которое можно использовать для сбора покрытия кода для кода C++ и C#. Он также поддерживает объединение и преобразование отчетов о покрытии кода. Это средство можно использовать для сбора покрытия кода в сценариях без тестирования (например, для простого консольного приложения).

Это расширение к инструменту dotnet-coverage dotnet, которое добавляет поддержку следующих сценариев:

  • Добавляет возможности безопасности для сбора данных покрытия кода ASP.NET в IIS.
  • Сбор данных о покрытии кода для C++.

Заметка

Покрытие кода доступно в версиях Visual Studio Enterprise, Community и Professional. В Visual Studio 2022 и предыдущих версиях функция покрытия кода была доступна только в версии Visual Studio Enterprise.

Заметка

Покрытие кода доступно только в версии Visual Studio Enterprise. Для покрытия кода .NET можно также использовать средство командной строки, dotnet-coverage.

Microsoft.CodeCoverage.Console доступен в Visual Studio 2022 17.3 в папке Common7\IDE\Extensions\Microsoft\CodeCoverage.Console. Его можно использовать в командной строке разработчика и 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 поддерживает дополнительные функции безопасности, позволяя собирать данные покрытия кода ASP.NET от IIS. Кроме того, средство 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>

    Указывает идентификатор сеанса покрытия кода. Если это не указано, средство создает случайный GUID.

  • -o|--output <output>

    Задает путь к файлу вывода в бинарном формате. Если не указано иное, инструментирование будет выполняться на месте.

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

    Задает путь к файлу журнала. При предоставлении каталога (с разделителем пути в конце) создается новый файл журнала для каждого процесса при анализе.

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

    Устанавливает уровень логирования. Поддерживаемые значения: Error, Infoи Verbose.

  • -dco|--disable-console-output

    Отключает выходные данные консоли.

  • --nologo

    Не отображайте баннер покрытия кода.

Покрытие статического кода для кода C++

Средство Microsoft.CodeCoverage.Console можно использовать для сбора покрытия кода для C++ с помощью статического инструментирования. Существует три различных метода, которые можно использовать. Для демонстрации предположим, что у нас есть простое консольное приложение C++ (связанное с параметром /PROFILE):

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

Покрытие кода с использованием команды сбора и файла конфигурации (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. Для получения дополнительной информации см. раздел Настройка анализа покрытия кода.

Покрытие кода с использованием команд instrument и collect (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.

Заметка

Идентификатор сеанса необходимо использовать в этом сценарии, чтобы убедиться, что приложение может подключаться и предоставлять данные внешнему сборщику.

На втором шаге необходимо запустить сборщик покрытия кода следующим образом:

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