동시성 시각화 도우미 명령줄 유틸리티(CVCollectionCmd)Concurrency Visualizer Command-Line Utility (CVCollectionCmd)

동시성 시각화 도우미 명령줄 유틸리티(CVCollectionCmd.exe)를 사용하면 명령줄에서 추적을 수집하여 Visual Studio용 동시성 시각화 도우미에서 확인할 수 있습니다.You can use the Concurrency Visualizer command-line utility (CVCollectionCmd.exe) to collect traces from the command line so that you can view them in the Concurrency Visualizer for Visual Studio . 이러한 도구는 Visual Studio가 설치되어 있지 않은 컴퓨터에서도 사용할 수 있습니다.The tools can be used on computers that do not have Visual Studio installed.

참고

Visual Studio 2013부터 동시성 시각화 도우미는 선택적 확장입니다.Starting in Visual Studio 2013, the Concurrency Visualizer is an optional extension. (이전에는 Visual Studio에 포함되었습니다.) 다운로드 센터에서 Visual Studio 2015용 동시성 시각화 수집 도구를 다운로드할 수 있습니다.(Previously it had been included in Visual Studio.) You can download the Concurrency Visualizer Collection Tools for Visual Studio 2015 from the Download Center.

동시성 시각화 도우미 명령줄 유틸리티 다운로드Download the Concurrency Visualizer Command-Line Utility

명령줄 유틸리티를 다운로드하여 설치하려면 Microsoft 다운로드 센터 웹 사이트에서 Visual Studio 2015용 동시성 시각화 수집 도구 로 이동한 후 아래 지침을 따르세요.To download and install the command-line utility, go to Concurrency Visualizer Collection Tools for Visual Studio 2015 and follow the instructions. 기본적으로 CVCollectionCmd.exe는 %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools(%ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\ on x64 computers)에 설치됩니다.By default, CVCollectionCmd.exe is installed in %ProgramFiles%\Microsoft Concurrency Visualizer Collection Tools\ (%ProgramFiles(x86)%\Microsoft Concurrency Visualizer Collection Tools\ on x64 computers).

CVCollectionCmd를 사용하여 추적 수집Collect a trace with CVCollectionCmd

CVCollectionCmd를 사용하여 앱을 시작하거나 CVCollectionCmd에 연결하여 추적을 수집할 수 있습니다.You can collect a trace by starting the app with CVCollectionCmd, or by attaching to it. 옵션은 아래의 명령 참조를 참조하세요.See the command reference below for your options. For example

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

명령 및 매개 변수Commands and Parameters

명령줄 유틸리티의 명령 및 매개 변수에 대한 도움말을 보려면 명령 프롬프트에 다음과 같이 입력합니다.To get help about the commands and parameters in the command-line utility, type this at the command prompt:

CvCollectionCmd /?CvCollectionCmd /?

옵션Option 설명Description 매개 변수Parameters 반환 값Return values
QueryQuery 수집을 시작할 수 있는지 여부를 반환합니다.Returns whether collection can be started. 없음None 수집을 시작할 준비가 되면 0입니다.0 if collection is ready to start.

수집이 이미 진행 중이면 1입니다.1 if collection is already in progress.

수집이 진행 중이 아니지만 필수 ETW 세션 중 하나 이상이 이미 활성화되었으면 2입니다.2 if collection isn't in progress, but one or more of the required ETW sessions is already enabled.
LaunchLaunch Concurrency 시각화 도우미 아래에서 지정한 프로세스를 실행합니다.Runs the specified process under the Concurrency Visualizer. 실행 파일의 경로The path of the executable. 실행에 성공한 경우 0입니다.0 if the run succeeded.

대상 응용 프로그램을 시작할 수 없어 실행에 실패한 경우 1입니다.1 if the run failed because the target application couldn't be started.

CVCollectionCmd에 지정한 출력 디렉토리에 쓸 수 있는 충분한 권한이 없어 실행에 실패한 경우 13입니다.13 if the run failed because CVCollectionCmd has insufficient permissions to write to the specified output directory.
연결Attach 시스템 차원에서 추적 수집을 시작합니다. 그렇지 않고 프로세스가 지정되어 있으면 해당 프로세스에 연결합니다.Begins collecting a system-wide trace; otherwise, attaches to a process if one is specified. 없음None. 연결에 성공한 경우 0입니다.0 if attachment succeeded.

지정한 프로세스가 잘못되었거나 모호해서 연결에 실패한 경우 1입니다.1 if attachment failed because the specified process is invalid or ambiguous.

CVCollectionCmd에 지정한 출력 디렉토리에 쓸 수 있는 충분한 권한이 없어 연결에 실패한 경우 13입니다.13 if the attachment failed because CVCollectionCmd has insufficient permissions to write to the specified output directory.
DetachDetach 수집을 중지합니다.Stops collection. 없음None. 분리에 성공한 경우 0입니다.0 if detachment succeeded.

현재 수집이 진행되고 있지 않아 분리에 실패한 경우 1입니다.1 if detachment failed because collection is not currently in progress.

수집을 중지할 수 없어 분리에 실패한 경우 2입니다.2 if detachment failed because collection could not be stopped.
분석Analyze 지정한 추적을 분석합니다.Analyzes the specified trace. CVTrace 파일의 전체 경로입니다.The full path of the CVTrace file. 분석에 성공한 경우 0입니다.0 if analysis succeeded.

지정한 추적이 시스템 차원이지만 대상 프로세스를 지정하지 않아 분석을 시작할 수 없는 경우 1입니다.1 if analysis cannot start because the specified trace was system-wide, but no target process was specified.

프로세스를 지정했으나 추적이 시스템 차원이 아니라서 분석을 시작할 수 없는 경우 2입니다.2 if analysis cannot start because the trace was not system-wide and a process was specified.

지정한 프로세스가 잘못되어 분석에 실패한 경우 3입니다.3 if analysis failed because the specified process is invalid.

지정한 CVTrace 파일이 잘못되어 분석에 실패한 경우 4입니다.4 if analysis failed because the specified CVTrace file is invalid.
LaunchArgsLaunchArgs 실행 가능한 대상 인수를 지정합니다.Specifies the target executable arguments. 이 옵션은 Launch 명령에만 적용됩니다.This option applies to the Launch command only. 응용 프로그램에 대한 명령줄 인수The command-line arguments to the application. 없음None.
OutdirOutdir 추적 파일을 저장할 디렉터리를 지정합니다.Specifies the directory in which to save trace files. Launch 및 Attach 명령에 적용됩니다.Applies to the Launch and Attach commands. 디렉터리 경로 또는 상대 경로A directory path or relative path. 없음None.
프로세스Process Attach 명령이 실행되면 연결할 프로세스 또는 Analyze 명령이 실행되면 분석할 추적의 프로세스를 지정합니다.Specifies the process to attach to when the Attach command is executed, or the process in a trace to analyze when the Analyze command is executed. Attach 및 Analyze 명령에 적용됩니다.Applies to the Attach and Analyze commands. 프로세스의 PID 또는 이름The PID or the name of the process. 없음None.
ConfigConfig 기본값 이외의 수집 설정이 필요한 경우 구성 파일의 경로를 지정합니다.Specifies the path of the configuration file, if you want collection settings other than the defaults. Launch, Attach 및 Analyze 명령에 적용됩니다.Applies to the Launch, Attach, and Analyze commands. XML 구성 파일의 디렉터리 경로 또는 상대 경로The directory path or relative path of the XML configuration file. 없음None.

구성 설정 사용자 지정Customizing Configuration Settings

CVCollectionCmd를 사용해 추적을 수집하고 수집 설정을 사용자 지정하려는 경우 구성 파일을 사용해 설정을 지정합니다.If you use CVCollectionCmd to collect traces and you want to customize the collection settings, then use a configuration file to specify them.

참고

Visual Studio를 사용해 추적을 수집하는 경우에는 구성 파일을 직접 수정하지 마세요.When you use Visual Studio to collect traces, don't directly modify the configuration file. 대신 고급 설정 대화 상자를 사용해 설정을 수정합니다.Instead, use the Advanced Settings dialog box to modify settings.

수집 설정을 수정하려면 CVCollectionCmd 유틸리티를 실행할 컴퓨터에 구성 파일을 만듭니다.To modify collection settings, create a configuration file on the machine where you will run the CVCollectionCmd utility. 구성 파일을 처음부터 만들거나 Visual Studio 설치된 컴퓨터에서 구성 파일을 복사하고 수정할 수 있습니다.You can create the configuration file from scratch, or you can copy the configuration file on the computer that has Visual Studio installed and modify that. 이 파일의 이름은 UserConfig.xmlLocal AppData 폴더에 있습니다.The file is named UserConfig.xml and is located in the Local AppData folder. 이 유틸리티를 실행하면 Launch, Attach 또는 Analyze 명령과 함께 Config 옵션을 사용합니다.When you run the utility, use the Config option in conjunction with the Launch, Attach, or Analyze command. Config 옵션과 관련된 매개 변수에서 구성 파일의 경로를 지정합니다.In the parameter that's associated with the Config option, specify the path of the configuration file.

구성 파일 태그Configuration File Tags

구성 파일은 XML 기반입니다.The configuration file is XML-based. 올바른 태그 및 값은 다음과 같습니다.Here are the valid tags and values:

태그Tag 설명Description Values
ConfigConfig 전체 구성 파일의 경계를 지정합니다.Demarcates the overall config file. 다음 요소를 포함해야 합니다.Must contain these elements:

- MinorVersion- MinorVersion
- MajorVersion- MajorVersion
MajorVersionMajorVersion 구성 파일의 주 버전을 지정합니다.Specifies the major version of the config file. Visual Studio 2012Visual Studio 2012 프로젝트의 경우 1이어야 합니다.Must be 1 for Visual Studio 2012Visual Studio 2012 projects. 1이 아니면 유틸리티가 작동하지 않습니다.If not 1, the utility will not work.
MinorVersionMinorVersion 구성 파일의 부 버전을 지정합니다.Specifies the minor version of the config file. Visual Studio 2012Visual Studio 2012 프로젝트의 경우 0이어야 합니다.Must be 0 for Visual Studio 2012Visual Studio 2012 projects. 0이 아니면 유틸리티가 작동하지 않습니다.If not 0, the utility will not work.
IncludeEnvSymbolPathIncludeEnvSymbolPath 환경 기호 경로(_NT_SYMBOL_PATH)를 사용할지 여부를 결정하는 값을 설정합니다.Sets a value that determines whether the environment symbol path (_NT_SYMBOL_PATH) is used. - True- True
- False- False
DeleteEtlsAfterAnalysisDeleteEtlsAfterAnalysis 분석이 완료되면 ETL 파일을 삭제할지 여부를 결정하는 값을 설정합니다.Sets a value that determines whether the ETL files are deleted when analysis completes. - True- True
- False- False
SymbolPathSymbolPath 기호 서버의 경로를 지정합니다.Specifies the path of the symbol server. 자세한 내용은 Microsoft 기호 서버를 사용하여 디버그 기호 파일 얻기를 참조하세요.For more information, see Use the Microsoft Symbol Server to obtain debug symbol files. 디렉터리 이름 또는 URLA directory name or URL.
MarkersMarkers 표식 공급자 목록을 포함합니다.Contains the list of marker providers. MarkerProvider 요소를 0개 이상 포함할 수 있습니다.May contain zero or more MarkerProvider elements.
MarkerProviderMarkerProvider 단일 표식 공급자를 지정합니다.Specifies a single marker provider. 다음 요소를 포함해야 합니다.Must contain these elements:

- Level- Level
- GUID- GUID
- Name- Name

다음 요소를 포함할 수 있습니다.Can contain these elements:

- Categories- Categories
- IsEnabled- IsEnabled
수준Level MarkerProvider의 중요도 수준을 설정합니다.Sets the importance level of a MarkerProvider. - Low- Low
- Normal- Normal
- High- High
- Critical- Critical
- Everything- Everything
GuidGuid ETW 표식 공급자의 고유한 전역 식별자입니다.The globally unique identifier of the ETW marker provider. GUIDA GUID.
이름Name 표식 공급자에 대한 설명을 지정합니다.Specifies the description of the marker provider. 문자열A string.
범주Categories 표식 공급자에 대해 수집된 범주를 지정합니다.Specifies the categories collected for the marker provider. 쉼표로 구분된 숫자 문자열 또는 숫자 범위A comma-delimited string of numbers or ranges of numbers.
IsEnabledIsEnabled 표식 공급자를 수집에 사용할지 여부를 결정하는 값을 설정합니다.Sets a value that determines whether the marker provider is enabled for collection. - True- True
- False- False
FilterConfigFilterConfig 수집에서 필터링된 ETW 이벤트의 구성 옵션 목록을 지정합니다.Specifies the list of configuration options of the ETW events that are filtered from collection. 다음 요소가 포함되어 있을 수 있습니다.May contain these elements:

- CollectClrEvents- CollectClrEvents
- ClrCollectionOptions- ClrCollectionOptions
- CollectSampleEvents- CollectSampleEvents
- CollectGpuEvents- CollectGpuEvents
- CollectFileIO- CollectFileIO
CollectClrEventsCollectClrEvents CLR 이벤트 수집 여부를 결정하는 값을 설정합니다.Set a value that determines whether CLR events are collected. - True- True
- False- False
ClrCollectionOptionsClrCollectionOptions 네이티브 앱의 CLR 이벤트 수집 여부와 NGEN 런다운 이벤트 수집 여부를 지정합니다.Specifies whether to collect CLR events for native apps, and whether to collect NGEN rundown events. 다음 값 중 하나 또는 둘 다를 포함하거나 둘 다 포함하지 않을 수 있습니다.May contain one, both, or none of these values:

- CollectForNative- CollectForNative
- DisableNGenRundown- DisableNGenRundown
CollectSampleEventsCollectSampleEvents 샘플 이벤트를 수집할지 여부를 결정하는 값을 설정합니다.Sets a value that determines whether sample events are collected. - True- True
- False- False
CollectGpuEventsCollectGpuEvents DX에서 생성한 이벤트를 수집할지 여부를 결정하는 값을 설정합니다.Sets a value that determines whether the events generated by DX are collected. - True- True
- False- False
CollectFileIOCollectFileIO 파일 I/O 이벤트를 수집할지 여부를 결정하는 값을 설정합니다.Sets a value that determines whether file I/O events are collected. - True- True
- False- False
UserBufferSettingsUserBufferSettings 사용자 버퍼 설정 매개 변수의 목록을 지정합니다.Specifies the list of user buffer-settings parameters. 다음 요소를 포함해야 합니다.Must contain these elements:

- BufferFlushTimer- BufferFlushTimer
- BufferSize- BufferSize
- MinimumBuffers- MinimumBuffers
- MaximumBuffers- MaximumBuffers
KernelBufferSettingsKernelBufferSettings 커널 버퍼 설정 매개 변수 목록을 지정합니다.Specifies the list of kernel buffer-settings parameters. 다음 요소를 포함해야 합니다.Must contain these elements:

- BufferFlushTimer- BufferFlushTimer
- BufferSize- BufferSize
- MinimumBuffers- MinimumBuffers
- MaximumBuffers- MaximumBuffers
BufferFlushTimerBufferFlushTimer ETW 버퍼의 플러시 타이머를 지정합니다.Specifies the flush timer of the ETW buffers. 양의 정수A positive integer.
BufferSizeBufferSize 각 이벤트 추적 세션 버퍼에 할당된 메모리 양(킬로바이트)입니다.Amount of memory that's allocated for each event-tracing session buffer, in kilobytes. 0~1024의 숫자A number from 0 to 1024.
MinimumBuffersMinimumBuffers 이벤트 추적 세션의 버퍼 풀에 할당된 최소 버퍼 수 입니다.The minimum number of buffers that are allocated for the buffer pool of the event-tracing session. 논리 코어 수의 2배 이상인 양의 정수A positive integer greater than or equal to twice the number of logical cores.
MaximumBuffersMaximumBuffers 이벤트 추적 세션의 버퍼 풀에 할당된 최대 버퍼 수 입니다.Maximum number of buffers that are allocated for the buffer pool of the event-tracing session. MinimumBuffers 이상의 수A number greater than or equal to MinimumBuffers.
JustMyCodeJustMyCode 내 코드만 디렉터리의 목록을 지정합니다.Specifies the list of Just My Code directories. MyCodeDirectory 요소 0개 이상으로 구성된 목록A list of zero or more MyCodeDirectory elements.
MyCodeDirectoryMyCodeDirectory 코드가 포함된 디렉터리를 지정합니다.Specifies a directory that contains your code. 절대 경로An absolute path.

예제Example

처음부터 구성 파일을 만드는 대신 다음 예제를 복사한 다음 요구 사항에 맞춰 수정할 수 있습니다.Instead of creating a configuration file from the beginning, you can copy the following example and then modify it to meet your requirements.

<?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>