다음을 통해 공유


스택 태그

WPA(Windows® Performance Analyzer)에서 스택 태그는 영향을 받는 호출 스택의 부분을 더 잘 식별할 수 있도록 레이블(태그)을 만들 수 있는 기능입니다.

스택 태그와 스택 프레임 태그의 차이점 이해

스택(프레임 태그)스택 태그를 스택 열에서 사용할 수 있는 동일한 데이터의 두 보기로 간주할 수 있습니다. 보기 편집기에서 스택 열이 스택 태그 또는 스택 열(프레임 태그)로 표시되도록 구성할 수 있습니다.

호출 스택은 프레임 목록으로 구성됩니다. 호출 스택이 A -> B -> C 형식이면 A, B, C의 세 가지 프레임이 있습니다. 스택 열(프레임 태그)은 모든 호출 스택 프레임을 태그에 매핑하거나 태그가 없는 경우 module!method로 기본 설정됩니다.

예를 들어 호출 스택 A -> B -> C-> D, 스택(프레임 태그) 보기에서 A -> FrameTagB -> FrameTagC -> D가 될 수 있습니다. 각 프레임 태그에는 *.stacktags 파일의 태그 정의 계층을 기반으로 하는 계층이 있을 수 있습니다(예: FrameTagB의 실제 값은 “HTML\Script\OM”일 수 있음).

스택 태그는 단일 태그 이름을 사용하여 전체 호출 스택을 요약합니다. 예를 들어 아래쪽의 가장 많이 매핑된 프레임 태그는 태그에 대해 지정된 우선 순위가 없는 한 일반적으로 스택 태그로 만들어집니다. 프레임 태그 보기가 A -> FrameTagB -> FrameTagC -> D인 동일한 A -> B -> C -> D 예제를 사용하면 스택 태그 보기는 FrameTagC입니다.

정확히 일치하는 모듈 및 메서드에 대한 일반 태그 외에도 HintOperator를 호출 수신자 또는 호출자로 HintTag를 정의할 수도 있습니다. 예를 들어 HintOperator를 호출 수신자로 사용하는 HintTag는 B에 대해 정의됩니다. Stack(FrameTags) 보기의 호출 스택 A -> B -> C -> D는 A -> FrameTagB -> ModuleOfC -> D이며 해당 StackTag 보기는 FrameTagB -> ModuleOfC입니다. C 모듈은 새 스택 태그로 동적으로 만들어집니다. HintTag의 OnlyShowModule 속성을 false로 명시적으로 설정하면 C가 ModuleOfC가 아닌 새 스택 태그로 만들어집니다. OnlyShowModule 특성은 기본적으로 true입니다. 일반적인 사용 사례는 RPC 서버 함수의 특성을 자동으로 지정하는 것입니다. 직접 호출자 함수는 rpcrt4.dll!Invoke_epilog1_start입니다. 이를 달성하기 위해 이 일반적인 호출자 함수에 대한 HintTag를 정의할 수 있습니다.

힌트 태그를 정의하여 일반적인 함수의 비용 식별

일반적으로 스택 태그 열은 단일 모듈에 있는 단일 함수의 비용을 식별합니다. 그러나 WPA는 힌트 태그와 힌트 연산자를 정의하는 경우 해당 함수에서 호출하는 모든 함수의 비용을 통합할 수 있습니다. 힌트 태그는 일반적인 함수 및 호출하는 함수 그룹에 대한 레이블이며 힌트 연산자는 일반적인 함수를 호출 함수인 호출자 또는 호출 수신자로 식별합니다.

일반적인 사용 사례는 WPA가 RPC 서버 함수에 자동으로 특성을 지정하도록 힌트 태그를 정의하는 것입니다. 예를 들어 잠금 홀더 또는 힙을 할당하는 함수를 표시하기 위해 힌트 태그를 정의할 수도 있습니다.

힌트 태그 정의

힌트 태그 및 힌트 연산자는 다음 테이블에 설명된 특성 및 값을 사용하여 다음 구문에서 XML로 정의됩니다.

<HintTag
   Name="string-label"
   Priority="integer"
   HintOperator="caller-or-callee"
   OnlyShowModule="Boolean">
   <Entrypoint 
      Module="module-name" 
      Method="method-name">
</HintTag>
요소 attribute Description
HintTag 이름 레이블로 사용할 문자열
우선 순위 정수입니다. 기본값은 0입니다.
HintOperator 값은 호출에 대해 “호출자”, 호출된 함수에 대해 “호출 수신자”입니다.
OnlyShowModule 부울(선택 사항). 기본값은 true입니다.
Entrypoint 모듈 메서드가 포함된 모듈의 이름입니다.
메서드 진입점인 메서드의 이름입니다.

XML 파일에 정의한 힌트 태그를 추가하려면 이 항목의 뒷부분에 있는 스택 태그 정의 파일에 스택 태그 추가 절차를 사용합니다.

힌트 태그 사용 예제

다음 그림에 나온 예제 데이터를 살펴봅니다.

여러 줄의 데이터가 있는 테이블

이 예제에는 WbemCore.dll에서 호출되는 4개의 RPC 함수가 있습니다.

  • CWbemLevel1Login::NTLMLogin
  • CWbemNamespace::GetObjectW
  • CWbemNamespace::PutInstance
  • CWbemNamespace::ExecMethod

WPA는 스택 태그 열에 총 비용을 RPC로 표시하므로 이러한 함수 호출 비용을 통합할 수 있으면 RPC 서버 쪽 함수의 비용을 결정하는 데 유용합니다.

힌트 태그 RPC의 진입점으로 정의된 rpcrt4.dll!Invoke 함수와 호출 수신자로 지정된 힌트 연산자를 사용하여 WPA는 RPCrpcrt4.dll!Invoke를 나타내고 RPC\wbemcore.dll\CWbemLevel1Login::NTLMLogin으로 wbemcore.dll!CWbemLevel1Login::NTLMLogin을 나타냅니다. 따라서 스택 태그 열에서 WPA는 RPC 서버 쪽 함수인 wbemcore.dll!CWbemLevel1Login::NTLMLogin의 비용을 31.855774ms로 표시합니다. WbemCore.dll에서 NTLMLogin은 호출된 함수의 계층 구조에서 맨 위에 있는 RPC 함수입니다.

힌트 태그 RPC는 다음 XML에 의해 정의됩니다.

<HintTag Name="RPC" HintOperator="Callee">
   <Entrypoint Module="rpcrt4.dll" Method="Invoke"/>
</HintTag>

스택 태그 정의 파일에 스택 태그 추가

스택 태그 정의 파일에 스택 태그 정의를 추가하려면 다음을 수행합니다.

  1. 메뉴에서 추적을 선택한 다음 추적 속성을 선택합니다. 추적 속성 탭이 열립니다.

  2. 스택 태그 정의 영역에서 원하는 위치에 추가를 클릭합니다.

  3. 스택 태그 파일이 포함된 영역으로 이동하여 선택한 다음 열기를 클릭합니다.

스택 태그 정의 파일에서 스택 태그 제거

스택 태그 정의 파일에서 스택 태그 정의를 제거하려면 다음을 수행합니다.

  1. 메뉴에서 추적을 선택한 다음 추적 속성을 선택합니다. 추적 속성 탭이 열립니다.

  2. 스택 태그 정의 영역에서 제거할 스택 태그 정의를 선택한 다음 제거를 클릭합니다.

    경고제거를 클릭하면 취소할 수 있는 옵션이 없으므로 선택한 스택 태그 정의를 제거해야 합니다.

스택 태그 정의 파일 다시 로드

스택 태그 정의를 스택 태그 정의 파일에 다시 로드하려면 다음을 수행합니다.

  1. 메뉴에서 추적을 선택한 다음 추적 속성을 선택합니다. 추적 속성 탭이 열립니다.

  2. 스택 태그 정의 영역에서 다시 로드를 클릭합니다. Shift 키를 누른 채 각 스택 태그 정의를 마우스 왼쪽 단추로 클릭하여 여러 스택 태그를 로드할 수 있습니다.

스택 태그 파일 문제 해결

WPA의 스택 태그 파일 내에서 문제를 조사하려면 다음을 수행합니다.

  • 메뉴에서 을 클릭한 다음 진단 콘솔을 선택합니다. WPA 디스플레이는 둘로 분할되는데 화면 위쪽에는 Graph 탐색기분석이 있고 화면 아래쪽에는 진단 콘솔이 있습니다.

    진단 콘솔을 클릭하여 WPA의 왼쪽 아래에 있는 진단 콘솔에 액세스할 수도 있습니다. 열리면 별도의 창으로 끌어오거나 위쪽이나 옆쪽으로 도킹할 수 있습니다.

    진단 콘솔에는 분석 워크플로 중에 발생하는 예외에 대한 정보가 나열됩니다. 진단 콘솔에서 기호 디코딩 문제를 진단할 수 있습니다.

WPA 사용자 인터페이스 소개

진단 콘솔