Служебная программа командной строки "Визуализатор параллелизма" (CVCollectionCmd)
С помощью служебной программы командной строки "Визуализатор параллелизма" (CVCollectionCmd.exe) можно собирать трассировки из командной строки, чтобы просматривать их в визуализаторе параллелизма для Visual Studio. Эти средства можно использовать на компьютерах без установленной среды Visual Studio.
Примечание.
Визуализатор параллелизма является необязательным расширением. (Ранее он был включен в Visual Studio.) Вы можете скачать средства сбора визуализатора параллелизма для Visual Studio из Центра загрузки.
Скачать программу командной строки "Визуализатор параллелизма"
Чтобы скачать и установить служебную программу командной строки, перейдите в средства сбора визуализатора параллелизма для Visual Studio и следуйте инструкциям. По умолчанию CVCollectionCmd.exe устанавливается в папке %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools\ (%ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\ на компьютерах с архитектурой x64).
Сбор трассировок с помощью CVCollectionCmd
Вы можете собирать трассировки, запустив приложение в CVCollectionCmd или приложив его к CVCollectionCmd. Возможные варианты см. в справочнике по командам ниже. Например.
<Path>CVCollectionCmd /launch c:\myapp\myapp.exe /outdir c:\myapp\data
Команды и параметры
Чтобы получить справку по командам и параметрам в программе командной строки, введите следующую команду:
CvCollectionCmd /?
Параметр | Описание | Параметры | Возвращаемые значения |
---|---|---|---|
Query | Указывает, можно ли начать сбор данных. | нет | Значение 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 | Указывает каталог, в котором сохраняются файлы трассировки. Применяется к командам Launch и Attach. | Путь каталога или относительный путь. | Нет. |
Обработка | Указывает процесс, присоединяемый при выполнении команды Attach, или процесс в анализируемой трассировке при выполнении команды Analyze. Применяется к командам Attach и Analyze. | PID или имя процесса. | Нет. |
Config | Указывает путь файла конфигурации, если требуется собирать нестандартные параметры. Применяется к командам Launch, Attach и Analyze. | Путь каталога или относительный путь XML-файла конфигурации. | Нет. |
Настройка параметров конфигурации
Если вы используете CVCollectionCmd для сбора трассировок и хотите настроить параметры сбора данных, укажите их в файле конфигурации.
Примечание.
Если вы используете Visual Studio для сбора трассировок, не изменяйте файл конфигурации напрямую. Вместо этого воспользуйтесь диалоговым окном Дополнительные параметры .
Чтобы изменить параметры сбора, создайте файл конфигурации на компьютере, где будет выполняться программа CVCollectionCmd. Вы можете создать файл конфигурации с нуля или скопировать файл конфигурации с компьютера, на котором установлена среда Visual Studio, и изменить его. Имя файла — UserConfig.xml, он расположен в папке Local AppData. При запуске программы используйте параметр Config вместе с командами Launch, Attach или Analyze. В параметре, связанном с параметром Config, укажите путь к файлу конфигурации.
Теги файла конфигурации
Файл конфигурации использует формат XML. Ниже приведены допустимые теги и значения.
Тег | Описание | Values |
---|---|---|
Config | Обозначает файл конфигурации в целом. | Должен содержать эти элементы: - MinorVersion - MajorVersion |
Основная версия | Задает основную версию файла конфигурации. | Должно быть 1 для большинства проектов Visual Studio. Если значение не равно 1, служебная программа не будет работать. |
MinorVersion | Задает дополнительную версию файла конфигурации. | Для большинства проектов Visual Studio должно быть 0. Если значение не равно 0, служебная программа не будет работать. |
IncludeEnvSymbolPath | Задает значение, определяющее, используется ли символьный путь к среде (_NT_SYMBOL_PATH). | - True - False |
DeleteEtlsAfterAnalysis | Задает значение, которое определяет, удаляются ли ETL-файлы после завершения анализа. | - True - False |
SymbolPath | Указывает путь к серверу символов. Более подробную информацию см. в разделе Получение файлов символов отладки с сервера символов Microsoft. | Имя каталога или URL-адрес. |
Маркеры | Содержит список поставщиков маркеров. | Может быть пустым или содержать элементы MarkerProvider. |
MarkerProvider | Указывает одного поставщика маркеров. | Должен содержать эти элементы: - Level GUID - Имя Может содержать эти элементы: - Categories - IsEnabled |
Уровень | Задает уровень важности MarkerProvider. | - Low - Normal - High — Critical; - Everything |
GUID | Глобальный уникальный идентификатор поставщика маркеров ETW. | Идентификатор GUID. |
Имя. | Задает описание поставщика маркеров. | Строка . |
Категории | Задает категории, собираемые для поставщика маркеров. | Строка чисел или диапазонов чисел, разделенных запятой. |
IsEnabled | Задает значение, которое определяет, включен ли поставщик маркеров для сбора данных. | - True - False |
FilterConfig | Указывает список параметров конфигурации событий ETW, которые фильтруются при сборе. | Может содержать эти элементы: - CollectClrEvents - ClrCollectionOptions - CollectSampleEvents - CollectGpuEvents - CollectFileIO |
CollectClrEvents | Указывает значение, которое определяет, собираются ли события CLR. | - True - False |
ClrCollectionOptions | Указывает, будут ли собираться события CLR для неуправляемых приложений и события завершения NGEN. | Может содержать одно или оба из следующих значений или может быть пустым: - CollectForNative - DisableNGenRundown |
CollectSampleEvents | Указывает значение, которое определяет, собираются ли примеры событий. | - True - False |
CollectGpuEvents | Указывает значение, которое определяет, собираются ли события, созданные DX. | - True - False |
CollectFileIO | Указывает значение, которое определяет, собираются ли события файлового ввода-вывода. | - True - False |
UserBufferSettings | Указывает список параметров пользовательского буфера. | Должен содержать эти элементы: - BufferFlushTimer - BufferSize - MinimumBuffers - MaximumBuffers |
KernelBufferSettings | Указывает список параметров буфера ядра. | Должен содержать эти элементы: - BufferFlushTimer - BufferSize - MinimumBuffers - MaximumBuffers |
BufferFlushTimer | Задает таймер сброса для буферов ETW. | Положительное целое число. |
BufferSize | Объем памяти, выделенный для каждого буфера сеанса трассировки событий, в килобайтах. | Число от 0 до 1024. |
MinimumBuffers | Минимальное число буферов, выделенных для пула буферов сеанса трассировки событий. | Положительное целое число, которое больше или равно числу логических ядер, умноженному на два. |
MaximumBuffers | Максимальное число буферов, выделенных для пула буферов сеанса трассировки событий. | Число, которое больше или равно значению MinimumBuffers. |
JustMyCode | Указывает список каталогов режима "Только мой код". | Список из элементов MyCodeDirectory, может быть пустым. |
MyCodeDirectory | Указывает каталог, содержащий ваш код. | Абсолютный путь. |
Пример
Вместо создания файла конфигурации с нуля можно скопировать следующий пример и изменить его в соответствии с вашими требованиями.
<?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>