기호 지원
WPA(Windows Performance Analyzer)가 올바르게 구성되면 WPA가 기록에서 발견된 주소에 대한 기호 파일의 기호 이름을 표시합니다.
기호를 디코딩하려면 도구에서 PDB(프로그램 데이터베이스) 파일로도 알려진 프로그램 데이터 베이스 파일을 찾아 전체 호출 스택을 빌드해야 합니다. 시스템이 구성 요소를 빌드할 때 컴파일러와 링커가 PDB 파일을 생성합니다. Microsoft는 온라인 기호 서버의 많은 Microsoft 제품에 프로그램 데이터베이스 파일을 제공합니다. Windows 및 WPA용 Microsoft 디버깅 도구는 온라인 기호 서버를 사용하여 기호 정보를 조회합니다. 따라서 기호 파일이 로컬로 복사되지 않은 경우 컴퓨터를 인터넷에 연결해야 합니다. Windows Performance Tookit에서는 동일한 기호 디코딩 인프라를 Windows 디버거 Windbg.exe로 사용합니다. 자세한 내용은 WinDbg를 참조하세요.
기호 지원을 구성하려면 _NT_SYMBOL_PATH 환경 변수를 정의해야 합니다. 다음 예제에서는 Microsoft 공용 기호 서버를 C:\symbols의 다운스트림 저장소와 함께 사용하도록 기호 경로를 설정합니다.
set _NT_SYMBOL_PATH= srv*C:\symbols*https://msdl.microsoft.com/downloads/symbols
이 예제는 단일 명령줄입니다.
이 기호 경로의 URL은 온라인 Microsoft 기호 서버를 지정합니다. 별표(C:\symbols) 사이의 경로는 다운스트림 저장소를 지정합니다. 이는 기호 확인 시스템에서 기호 파일이 유지되는 로컬 캐시입니다. 또한 WPA 도구는 개발하는 구성 요소에서 기호를 디코딩합니다. 기록하려는 구성 요소의 PDB 파일이 포함된 _NT_SYMBOL_PATH에 하나 이상의 경로를 추가합니다. 예를 들어 다음 예제에서는 이전 예제에서 경로가 설정된 방법을 보여줍니다.
set _NT_SYMBOL_PATH=c:\coding\fs\release;srv*C:\symbols*
Xperf 또는 WPA가 기호를 디코딩하는 경우, Xperf 또는 WPA는 원래의 기호 파일 또는 PDB를 압축된 버전으로 \symcache 디렉터리의 디스크에 캐시합니다. 이를 위해 Xperf 또는 WPA는 당시 사용 가능한 기호를 사용합니다. Microsoft 외부에서 사용 가능한 운영 체제 기호는 공용 기호입니다. 이러한 기호는 내부 프라이빗 기호보다 정보를 적게 포함합니다. 블랙 박스 테스트에서 공용 기호는 잘못된 정보를 포함할 수도 있습니다. 비밀 유지 계약 하에, 더 신뢰할 수 있는 프라이빗 기호를 얻을 수 있습니다. 공용 기호를 사용하여 기록을 디코딩한 다음 프라이빗 기호를 가져오는 경우, Xperf 또는 WPA에서 새 프라이빗 기호를 검색하기 전에 \symcache 디렉터리를 지워야 합니다.
기호 디코딩 문제 해결
기호 디코딩 지원은 복잡합니다. 분산 트랜잭션과 관련하여 충족해야 하는 요구 사항은 다음과 같습니다.
기록을 연 후 Xperf 명령줄에서
-symbols
를 지정하거나 WPA 내 추적 메뉴에서 Load Symbols를 선택해야 합니다.환경 변수를 올바르게 구성해야 합니다. Xperf에 대한 자세한 내용은 기호를 참조하세요.
ETW 커널 기록 파일이 중지되고 올바르게 병합되어야 합니다. 자세한 내용은 기록 중지를 참조하세요.
WPR(Windows Performance Recorder) 또는 WPA는 ETW 사용자 기록 파일을 동일한 컴퓨터에서 동시에 가져온 커널 기록 파일과 병합합니다.
_NT_SYMBOL_PATH가 지정하는 이진 및 기호 원본에 액세스할 수 있어야 합니다. 기호 서버를 사용하는 경우, 기호 서버가 리디렉터로만 기능할 때가 종종 있습니다. 이 경우 기호 서버와, 기호 서버가 가리키는 사이트(이진 파일 및 기호를 호스트함)에 모두 액세스할 수 있어야 합니다.
_NT_SYMBOL_PATH는 올바른 파일을 가리켜야 합니다. 파일이 다른 빌드 또는 아키텍처에 있는 경우, 파일이 작동하지 않습니다. 응용프로그램 이진 파일의 버전이 _NT_SYMBOL_PATH가 가리키는 기호와 동일한 버전이 아닌 경우 호출 스택을 볼 수 없습니다.
기호 불일치를 배제하려면 Windows용 디버깅 도구 배포의 Symchk.exe를 사용하여 기록된 컴퓨터의 기호 파일과 기호가 일치하는지 확인합니다. 예:
symchk /v <local_file> /s <sympath_to_name.pdb>
이진 불일치를 배제하려면
fc /b
명령을 사용하여 기록된 컴퓨터의 이진 파일이 드롭 공유의 이진 파일과 일치하는지 확인합니다. 예:fc /b <local_file> <drop_share_file>
Xperf에서는 적어도
PROC_THREAD+LOADER
플래그를 사용하여 ETW 커널 기록을 캡처해야 합니다. 이러한 플래그는 프로세스 메모리의 프로세스 수명 및 이미지 가상 주소 범위에 대한 기본 정보를 제공합니다. 이 정보는 XPerf가 가상 주소를 이미지 및 기호로 디코딩하는 데 도움이 됩니다.ETW 커널 기록에서 이러한 플래그를 사용하도록 설정되었는지 확인하려면 Xperf -process 이벤트(만들기, 삭제, 런다운 시작, 런다운 종료) 및 이미지 이벤트(로드, 언로드, 런다운 시작, 런다운 종료)가 다음 명령을 사용하여 생성된 표에 있는지 확인합니다.
xperf -i kernel.etl -a tracestats -detail
참고 이러한 이벤트가 발생했는지 여부에 따라 이러한 모든 이벤트가 표에 나열되지 않을 수도 있습니다.
Xperf 기호 디코딩의 제한 사항
실행 가능 이미지(예: \Path\Library.dll)에 드라이브를 지정하지 않은 경우 Xperf는 기본적으로 시스템 드라이브로 설정됩니다.
-d/-merge
명령을 실행할 때, Xperf가 기록하는 동안 실행되는 프로세스 내의 실행 가능 이미지를 찾을 수 없는 경우 Xperf는 해당 이미지 및 기호 파일 ID 정보를 검색하고 병합된 기록에 정보를 추가할 수 없습니다. 이 정보가 없으면 Xperf는 해당 기록에서 해당 이미지에 대한 기호 디코딩을 수행할 수 없습니다.
이 문제는 디스크 I/O 또는 파일 I/O의 경로와 같은 다른 파일 경로에는 영향을 주지 않습니다.
기호 디코딩을 사용하도록 설정하고 Xperf ETW 기록에서 올바른 이미지 로드 및 언로드 경로를 사용하도록 설정하려면 시스템 드라이브에 기호 디코딩 또는 이미지 로드 및 언로드 경로가 필요할 수도 있는 모든 실행 가능 이미지를 저장해야 합니다. 그런 다음 해당 드라이브에서 이미지를 실행합니다. 가능하지 않은 경우 다른 드라이브에서 이미지를 실행하더라도 시스템 드라이브에 이미지의 미러를 만듭니다. 예를 들어 C:가 시스템 드라이브인 경우 C:\game\bin\binkw32.dll에서 D:\game\bin\binkw32.dll과 동일한 복사본을 만듭니다.