Программа командной строки визуализатора параллелизма (CVCollectionCmd)

С помощью программы командной строки визуализатора параллелизма (CVCollectionCmd.exe) можно собирать трассировки из командной строки, чтобы просмотреть их в визуализаторе параллелизма для Visual Studio. Инструменты можно использовать на компьютерах, на которых не установлен Visual Studio.

Замечание

Визуализатор параллелизма является необязательным расширением. (Ранее он был включен в Visual Studio.) Вы можете загрузить коллекцию инструментов Concurrency Visualizer для Visual Studio из Центра загрузок.

Скачайте служебную программу визуализатора параллелизма

Чтобы загрузить и установить служебную программу командной строки, перейдите на инструменты сбора данных Visual Studio Concurrency Visualizer и следуйте инструкциям. По умолчанию CVCollectionCmd.exe устанавливается в %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools\ (%ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\ на компьютерах x64).

Сбор трассировки с помощью CVCollectionCmd

Вы можете собирать трассировку, запуская приложение с CVCollectionCmd или подключившись к нему. См. приведённый ниже справочник команд для получения доступных вам опций. Например.

<Path>CVCollectionCmd /launch c:\myapp\myapp.exe /outdir c:\myapp\data

Команды и параметры

Чтобы получить справку о командах и параметрах в служебной программе командной строки, введите следующую команду в командной строке:

CvCollectionCmd /?

Вариант Description Параметры Возвращаемые значения
Query Возвращает, можно ли инициировать сбор данных. None Значение 0, если коллекция готова к запуску.

1, если сбор уже выполняется.

2, если коллекция не выполняется, но одна или несколько необходимых сеансов ETW уже включены.
Launch Выполняет указанный процесс в визуализаторе параллелизма. Путь исполняемого файла. Значение 0, если выполнение выполнено успешно.

1, если выполнение завершилось сбоем, так как целевое приложение не удалось запустить.

13, если выполнение завершилось сбоем, так как CVCollectionCmd имеет недостаточно разрешений для записи в указанный выходной каталог.
Attach Начинает сбор трассировки на уровне системы; в противном случае присоединяется к процессу, если он указан. Нет. Значение 0, если вложение выполнено успешно.

1, если вложение завершилось ошибкой, из-за того что указанный процесс недопустим или неоднозначен.

13, если вложение не удалось, так как CVCollectionCmd имеет недостаточно разрешений для записи в указанный выходной каталог.
Detach Прекращает сбор данных. Нет. Значение 0, если отсоединение выполнено успешно.

1, если отсоединение не удалось из-за того, что в настоящее время сбор данных не выполняется.

2, если отсоединение не удалось, поскольку коллекцию не удалось остановить.
Анализировать Анализирует указанную трассировку. Полный путь к файлу CVTrace. 0, если анализ выполнен успешно.

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

2 если анализ не может начаться, поскольку трассировка не была выполнена на уровне всей системы и был указан процесс.

3, если анализ завершился ошибкой, так как указанный процесс недопустим.

4, если анализ завершился ошибкой, так как указанный файл CVTrace недопустим.
LaunchArgs Задает аргументы целевой исполняемой программы. Этот параметр применяется только к команде Launch. Аргументы командной строки для приложения. Нет.
Outdir Указывает каталог, в котором нужно сохранить файлы трассировки. Применяется к командам запуска и присоединения. Путь к каталогу или относительный путь. Нет.
Процедура Указывает процесс, к которому следует подключиться при выполнении команды Attach, или процесс трассировки, который требуется проанализировать при выполнении команды Analyze. Применяется к командам "Присоединить" и "Анализировать". ИДЕНТИФИКАТОР процесса (PID) или имя процесса. Нет.
Config Указывает путь к файлу конфигурации, если требуется параметры коллекции, отличные от значений по умолчанию. Применяется к командам запуска, присоединения и анализа. Путь к каталогу или относительный путь к XML-файлу конфигурации. Нет.

Настройка параметров конфигурации

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

Замечание

При использовании Visual Studio для сбора трассировок не изменяйте файл конфигурации напрямую. Вместо этого используйте диалоговое окно "Дополнительные параметры" для изменения параметров.

Чтобы изменить параметры коллекции, создайте файл конфигурации на компьютере, где будет выполняться служебная программа CVCollectionCmd. Вы можете создать файл конфигурации с нуля или скопировать файл конфигурации на компьютере с установленным и измененным Visual Studio. Файл называется UserConfig.xml и находится в папке Local AppData . При запуске служебной программы используйте параметр Config в сочетании с командой Launch, Attach или Analyze. В параметре, связанном с параметром конфигурации, укажите путь к файлу конфигурации.

Теги файла конфигурации

Файл конфигурации основан на XML. Ниже приведены допустимые теги и значения:

Тег Description Ценности
Config Разграничивает общий файл конфигурации. Должен содержать следующие элементы:

- Минорная версия
— MajorVersion
Мажорная версия Указывает основную версию файла конфигурации. Должно быть 1 для большинства проектов Visual Studio. Если не 1, программа не будет работать.
Младшая версия Указывает минорную версию файла конфигурации. Для большинства проектов Visual Studio должно быть 0. Если не 0, программа не будет работать.
IncludeEnvSymbolPath Задает значение, определяющее, используется ли путь символа среды (_NT_SYMBOL_PATH). Истина
-Ложный
DeleteEtlsAfterAnalysis Задает значение, определяющее, удаляются ли файлы ETL при завершении анализа. Истина
-Ложный
SymbolPath Указывает путь к серверу символов. Дополнительные сведения см. в разделе "Использование сервера символов Майкрософт" для получения файлов символов отладки. Имя каталога или URL-адрес.
Маркеры Содержит список поставщиков маркеров. Может содержать ноль или несколько элементов MarkerProvider.
MarkerProvider Указывает один поставщик маркеров. Должен содержать следующие элементы:

-Уровень
— GUID
- Имя

Может содержать следующие элементы:

-Категории
— IsEnabled
Level Задает уровень важности для MarkerProvider. - Низкий
-Нормальный
- Высокий
-Критический
-Всё
Гид Глобальный уникальный идентификатор поставщика маркеров ETW. A GUID.
Имя Указывает описание поставщика маркеров. Строка .
Категории Указывает категории, собранные для поставщика маркеров. Строка чисел или диапазонов чисел с разделителями-запятыми.
Включено Задает значение, определяющее, включен ли поставщик маркеров для коллекции. Истина
-Ложный
FilterConfig Задает список параметров конфигурации событий ETW, отфильтрованных из коллекции. Может содержать следующие элементы:

— CollectClrEvents
— ClrCollectionOptions
— CollectSampleEvents
— CollectGpuEvents
— CollectFileIO
CollectClrEvents Задайте значение, определяющее, собираются ли события CLR. Истина
-Ложный
ClrCollectionOptions Указывает, следует ли собирать события CLR для собственных приложений и собирать ли события завершения NGEN. Может содержать одно, оба или ни одно из следующих значений:

— CollectForNative
— DisableNGenRundown
CollectSampleEvents Задает значение, определяющее, собираются ли примеры событий. Истина
-Ложный
CollectGpuEvents Задает значение, определяющее, собираются ли события, созданные DX. Истина
-Ложный
CollectFileIO Задает значение, определяющее, собираются ли события ввода-вывода файлов. Истина
-Ложный
НастройкиБуфераПользователя (UserBufferSettings) Указывает список параметров буфера пользователя. Должен содержать следующие элементы:

— BufferFlushTimer
— РазмерБуфера
- МинимальныеБуферы
- МаксимумБуферов
ПараметрыБуфераЯдра Задает список параметров буфера ядра. Должен содержать следующие элементы:

— BufferFlushTimer
— РазмерБуфера
- МинимальныеБуферы
- МаксимумБуферов
ТаймерОчисткиБуфера Задает таймер очистки буферов ETW. Положительное целое число.
РазмерБуфера Объем выделенной памяти для каждого буфера сеанса трассировки событий, в килобайтах. Число от 0 до 1024.
Минимальные буферы Минимальное количество буферов, выделенных для пула буферов сеанса трассировки событий. Положительное целое число, большее или равное удвоенному числу логических ядер.
МаксимальноеКоличествоБуферов Максимальное количество буферов, выделенных для буферного пула сеанса трассировки событий. Число, которое больше или равно минимальному количеству буферов.
JustMyCode Указывает список каталогов Just My Code. Список из нуля или более элементов MyCodeDirectory.
MyCodeDirectory Указывает каталог, содержащий код. Абсолютный путь.

Example

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

<?xml version="1.0"?>
<LocalConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" MajorVersion="1" MinorVersion="0">

  <IncludeEnvSymbolPath>true</IncludeEnvSymbolPath>

  <DeleteEtlsAfterAnalysis>true</DeleteEtlsAfterAnalysis>

  <TraceLocation>C:\traces</TraceLocation>

  <SymbolPath>http://symweb</SymbolPath>

  <Markers>
    <MarkerProvider Name="Default" Guid="8d4925ab-505a-483b-a7e0-6f824a07a6f0" Level="Low" />
    <MarkerProvider Name="TPL" Guid="2e5dba47-a3d2-4d16-8ee0-6671ffdcd7b5" Level="Normal" />
    <MarkerProvider Name="TPL Dataflow" Guid="16f53577-e41d-43d4-b47e-c17025bf4025" Level="Normal" />
    <MarkerProvider Name="TPL Synchronization" Guid="ec631d38-466b-4290-9306-834971ba0217" Level="Normal" />
    <MarkerProvider Name="PLINQ" Guid="159eeeec-4a14-4418-a8fe-faabcd987887" Level="Normal" />
    <MarkerProvider Name="Concurrency Runtime" Guid="f7b697a3-4db5-4d3b-be71-c4d284e6592f" Level="Normal" />
    <MarkerProvider Name="Scenario Markers" Guid="fb9244c9-f23a-4966-8a9c-97a51f8c355b" Level="Low" />

    <!-- The IsEnabled and Categories elements are optional -->
    <MarkerProvider Name="myMarker1" Guid="d0dbb3a3-895c-4ce6-96d9-28f69d664dc3" Level="Critical" IsEnabled="false" Categories="0,1,3-5,8" />
    <MarkerProvider Name="myMarker2" Guid="03452127-a617-4302-9e30-c0d10442e4ee" Level="Low" IsEnabled="false" Categories="0,1,3-5,8-10,11-13" />
  </Markers>

  <FilterConfig>
    <CollectClrEvents>true</CollectClrEvents>
    <ClrCollectionOptions>CollectForNative DisableNGenRundown</ClrCollectionOptions>
    <CollectSampleEvents>true</CollectSampleEvents>
    <CollectGpuEvents>true</CollectGpuEvents>
    <CollectFileIO>true</CollectFileIO>
  </FilterConfig>

  <UserBufferSettings>
    <BufferFlushTimer>0</BufferFlushTimer>
    <BufferSize>256</BufferSize>
    <MinimumBuffers>512</MinimumBuffers>
    <MaximumBuffers>1024</MaximumBuffers>
  </UserBufferSettings>

  <KernelBufferSettings>
    <BufferFlushTimer>0</BufferFlushTimer>
    <BufferSize>256</BufferSize>
    <MinimumBuffers>512</MinimumBuffers>
    <MaximumBuffers>1024</MaximumBuffers>
  </KernelBufferSettings>

  <!-- List of MyCodeDirectory directories -->
  <JustMyCode>
    <MyCodeDirectory>C:\myBinaries1</MyCodeDirectory>
    <MyCodeDirectory>C:\myBinaries2</MyCodeDirectory>
  </JustMyCode>
</LocalConfig>