SymSrv 사용

SymSrv는 중앙 집중식 기호 저장소에서 기호 파일을 제공합니다. 이러한 저장소는 임의의 수의 프로그램 또는 운영 체제에 해당하는 임의의 수의 기호 파일을 포함할 수 있습니다. 또한 미니덤프 파일을 디버깅할 때 특히 유용한 이진 파일을 포함할 수도 있습니다.

저장소는 실제 기호 및 이진 파일 또는 단순히 기호 파일에 대한 포인터를 포함할 수 있습니다. 저장소에 포인터가 포함된 경우 SymSrv는 소스에서 직접 실제 파일을 검색합니다.

또한 SymSrv는 큰 기호 저장소를 특수화된 디버깅 작업에 적합한 더 작은 하위 집합으로 분리할 수 있습니다.

마지막으로 SymSrv는 운영 체제에서 제공하는 로그온 정보를 사용하여 HTTP 또는 HTTPS 소스에서 기호 파일을 가져올 수 있습니다. SymSrv는 스마트 카드, 인증서 및 일반 로그인과 암호로 보호되는 HTTPS 사이트를 지원합니다.

기호 경로 설정

기호 경로에 설명된 대로 기호 경로(_NT_SYMBOL_PATH 환경 변수)는 세미콜론으로 구분된 여러 경로 요소로 구성될 수 있습니다. 이러한 경로 요소 중 하나 이상이 텍스트 "srv*"로 시작하는 경우 요소는 기호 서버이며 SymSrv를 사용하여 기호 파일을 찾습니다.

참고

"srv*" 텍스트를 지정하지 않았지만 실제 경로 요소가 기호 서버 저장소인 경우 기호 처리기는 "srv*"가 지정된 것처럼 작동합니다. 기호 처리기는 지정된 경로의 루트 디렉터리에 "pingme.txt"라는 파일이 있는지 검색하여 이 결정을 내립니다.

 

기호 경로가 세미콜론으로 구분된 기호 경로 요소로 구성되는 것처럼 기호 서버는 별표로 구분된 기호 저장소 요소로 구성됩니다. "srv*" 접두사 뒤에는 최대 10개의 기호 저장소가 올 수 있습니다. 목록 왼쪽에 나열된 저장소를 다운스트림 저장소라고 하며 오른쪽에 있는 저장소를 업스트림 저장소라고 합니다.

srv\**SymbolStore* srv\**SymbolStore1*\**SymbolStoreN*

경로에 기호 저장소 요소가 하나만 포함된 경우 SymSrv는 해당 저장소에서 직접 요청된 파일을 사용하려고 합니다.

경로에 기호 저장소 2개가 있는 경우 SymSrv는 가장 왼쪽에 있는 기호 저장소에서 기호 파일을 찾습니다. 파일이 있는 경우 이 파일이 사용됩니다. 파일이 없는 경우 SymSrv는 바로 오른쪽에 있는 기호 저장소에서 찾습니다. 파일이 있는 경우 왼쪽 저장소에 복사되어 해당 저장소에서 열립니다.

저장소가 여러 개 있는 경우 이 동작은 파일이 발견되거나 목록에 더 이상 저장소가 없을 때까지 오른쪽 방향으로 이어집니다.

파일은 가장 왼쪽에 있는 저장소를 제외한 어떤 저장소에서도 열리지 않습니다. 파일이 체인의 다른 위치에 있으면 파일 왼쪽에 있는 모든 저장소에 복사됩니다. 이 복사 프로세스를 "계단식"이라고 하며 이 문서의 뒷부분에서 설명할 수 있는 특정 이점을 제공합니다.

기호 저장소 유형

다음 표는 지원되는 기호 저장소 유형의 예제를 표시합니다.

기호 저장소 유형 설명
\\server\share 원격 서버의 공유에 대한 정규화된 UNC 경로입니다.
c:\LocalCache 클라이언트 컴퓨터의 디렉터리에 대한 경로입니다.
https://InternetSite 기호를 호스팅하는 웹 사이트의 URL입니다. 목록에서 가장 오른쪽에 있는 저장소여야 하며 목록에 해당 저장소만 있어서는 안 됩니다.
https://SecureInternetSite 기호를 호스트하는 보안 웹 사이트의 URL입니다. 암호, Windows 로그인 자격 증명, 인증서 및 스마트 카드를 지원할 수 있습니다. 목록에서 가장 오른쪽에 있는 저장소여야 하며 목록에 해당 저장소만 있어서는 안 됩니다.
<공백> 두 별표 사이에 텍스트가 없으면 기본 다운스트림 저장소를 나타냅니다. 위치는 SymSetHomeDirectory를 호출하여 설정됩니다. 기본값은 호출 애플리케이션의 프로그램 디렉터리 바로 아래에 있는 "sym"이라는 디렉터리입니다. 이를 기본 로컬 캐시라고도 합니다.

 

HTTP 기반 기호 저장소는 쓸 수 없으므로 목록에서 가장 오른쪽에 있는 저장소여야 합니다. HTTP 기반 기호 저장소가 저장소 목록의 중간 또는 왼쪽에 있는 경우 찾은 파일을 복사할 수 없으며 체인이 끊어집니다. 또한 기호 처리기는 웹 사이트에서 파일을 열 수 없으므로 HTTP 기반 저장소가 가장 왼쪽에 있어서는 안 되며 목록에 해당 저장소만 있어서는 안 됩니다. SymSrv에 이 기호 경로가 표시되면 기본 다운스트림 저장소가 기호 경로에 표시되는지 여부에 관계없이 기본 다운스트림 저장소에 파일을 복사하여 복구를 시도하고 해당 위치에서 엽니다.

예제

\\mybuilds\mysymbols에 기호 저장소가 있는 SymSrv를 사용하려면 다음 기호 경로를 설정합니다.

set _NT_SYMBOL_PATH= srv*\\mybuilds\mysymbols

디버거가 \\mybuilds\mysymbols의 기호 저장소에서 로컬 디렉터리 c:\localsymbols로 기호 파일을 복사하도록 기호 경로를 설정하려면 다음을 사용합니다.

set _NT_SYMBOL_PATH=srv*c:\localsymbols*\\mybuilds\mysymbols

디버거가 \\mybuilds\mysymbols의 기호 저장소에서 기본 다운스트림 저장소(일반적으로 c:\debuggers\sym)로 기호 파일을 복사하도록 기호 경로를 설정하려면 다음을 사용합니다.

set _NT_SYMBOL_PATH=srv**\\mybuilds\mysymbols

계단식 저장소를 사용하려면 다음 기호 경로를 설정합니다.

set _NT_SYMBOL_PATH = srv*c:\localsymbols*\\NearbyServer\store*https://DistantServer

이 예제에서 SymSrv는 먼저 c:\localsymbols에서 파일을 찾습니다. 이 파일이 있으면 해당 파일 경로를 반환합니다. 파일이 없으면 SymSrv는 \\NearbyServer\store에서 파일을 찾습니다. 이 파일이 있으면 SymSrv는 파일을 c:\localsymbols에 복사하고 해당 파일 경로를 반환합니다. 파일이 없으면 SymSrv는 https://DistantServer에서 파일을 찾고 파일이 있으면 SymSrv는 파일을 \\NearbyServer\store에 복사한 다음 c:\localsymbols에 복사합니다.

이 마지막 예제는 기호 경로의 적절한 설계를 사용하여 기호 다운로드를 최적화하는 방법을 보여줍니다. 디버거 그룹이 있는 작업 사이트가 있고 모두 먼 위치에서 기호를 가져와야 하는 경우 모든 디버거 근처에 기호 저장소가 있는 공용 서버를 설정할 수 있습니다. 그런 다음 위의 기호 경로를 사용하여 모든 디버거를 설정합니다. 특정 버전의 foo.pdb가 필요한 첫 번째 디버거는 https://DistantServer에서 \\NearbyServer\store로 다운로드한 다음 c:\localsymbols의 자체 컴퓨터로 다운로드합니다. 동일한 파일이 필요한 다음 디버거는 이전 디버거가 이미 다운로드한 \\NearbyServer\store에서 다운로드할 수 있습니다. 이 다단계 캐싱은 시간과 네트워크 대역폭을 크게 절약합니다.

Microsoft 기호 저장소

Microsoft는 여러 버전의 Windows 운영 체제에 대한 기호 파일이 포함된 인터넷 기호 서버에 대한 액세스를 제공합니다. 이 기호 카탈로그에 모두 포함되어 있다고 보장할 수는 없지만 아주 광범위합니다. 다른 Microsoft 제품도 표시됩니다.

인터넷 기호 서버는 핫 픽스, 서비스 팩, 보안 롤업 패키지 및 소매 릴리스를 포함하여 Microsoft Windows 운영 체제의 다양한 Windows 기호로 채워져 있습니다. Windows 제품용 현재 베타 및 릴리스 후보뿐만 아니라 Microsoft Internet Explorer와 같은 다양한 Microsoft 제품용 서버에서도 기호를 사용할 수 있습니다.

디버깅 중에 인터넷에 액세스할 수 있는 경우 디버깅 세션 전에 기호 파일을 따로 다운로드하지 않아도 디버깅 세션 중에 필요에 따라 기호를 다운로드하도록 디버거를 구성할 수 있습니다. 지정한 디렉터리 위치에 기호가 다운로드되면 디버거가 해당 위치에서 로드합니다.

Microsoft 기호 저장소의 URL은 https://msdl.microsoft.com/download/symbols입니다. 다음 예제에서는 디버거 기호 경로를 설정하는 방법을 보여줍니다(c:\DownstreamStore를 다운스트림 저장소 경로로 대체).

srv*c:\DownstreamStore*https://msdl.microsoft.com/download/symbols

압축 파일

Windows Server 2003 Resource Kit와 함께 배포된 compress.exe 도구로 압축한 경우 SymSrv는 압축 파일이 포함된 기호 저장소와 호환됩니다. 압축 파일은 파일 확장명 마지막에 밑줄이 있어야 합니다(예: module1.pd_ 또는 module2.db_). 자세한 내용은 SymStore 사용을 참조하세요.

계단식으로 진행되는 경우 대상 저장소가 경로에서 가장 왼쪽에 있는 저장소가 아니면 파일의 압축이 해제되지 않습니다. 경로에 저장소가 하나만 있고 압축 파일이 포함된 경우 SymSrv는 기본 다운스트림 저장소가 기호 경로에 표시되지 않더라도 파일을 기본 다운스트림 저장소로 복사하고 엽니다.

DbgHelp 6.1 이하: 마스터 저장소의 파일이 압축된 경우 다운스트림 저장소를 사용해야 합니다. SymSrv는 다운스트림 저장소에 복사하기 전에 모든 파일의 압축을 풉니다.

캐시 삭제

다운스트림 저장소를 캐시로 사용하는 경우 언제든지 이 디렉터리를 삭제하여 디스크 공간을 절약할 수 있습니다.

다양한 프로그램 또는 Windows 버전용 기호 파일이 있는 방대한 기호 저장소가 있을 수 있습니다. 대상 컴퓨터에서 사용되는 Windows 버전을 업그레이드하면 캐시된 기호 파일이 모두 이전 버전과 일치됩니다. 캐시된 파일은 이후에 다시 사용되지 않으므로 이 단계에서 캐시를 삭제하는 것이 좋습니다.

Windows용 디버깅 도구에는 디렉터리 트리에서 파일을 선택적으로 제거하여 최근에 사용한 파일을 남기는 agestore.exe라는 유틸리티가 함께 제공됩니다. 이 도구는 기호 서버 저장소에서 사용되지 않는 파일을 정리하도록 설계되었습니다. 이렇게 하면 차단 날짜 및 디렉터리 크기 알고리즘을 비롯한 여러 옵션을 컨트롤할 수 있습니다.

플랫 캐시 디렉터리

기본 다운스트림 저장소를 표준 기호 트리 구조체가 아닌 플랫 디렉터리로 선언할 수 있습니다. 이렇게 하려면 SYMOPT_FLAT_DIRECTORYSymSetOptions 함수를 호출합니다(SymSrv에서 SSRVOPT_FLAT_DEFAULT_STORE 옵션도 설정됨). 이 작업을 수행하기 전에 SymSetHomeDirectory를 호출해야 합니다. 그렇지 않으면 기호 파일을 프로그램 디렉터리에 쓸 수 있습니다.

포인터 파일

SymStore는 대상 파일 자체가 아닌 대상 파일을 가리키는 파일을 만들고 사용할 수 있습니다. 기호 저장소에 이러한 포인터 파일이 포함된 경우 기본값은 포인터 파일에 표시된 위치에서 저장소로 파일을 복사하는 것입니다. 가리키는 파일이 아닌 포인터 파일이 복사되도록 저장소를 구성하려면 대상 저장소의 루트에 wantsptr.txt라는 파일을 만듭니다. wantsptr.txt의 내용은 중요하지 않으며 파일을 만들기만 하면 됩니다.

기호 목록에서 파일 제외

기호 검색 범위에서 파일을 제외하려면 symsrv.ini 또는 레지스트리에서 해당 이름을 지정합니다. symsrv.ini에서 파일을 지정하려면 Exclusions라는 섹션을 만들고 파일 목록을 작성합니다. 다음 예제와 같이 파일 이름에 와일드카드를 포함할 수 있습니다.

[Exclusions]
dbghelp.pdb
symsrv.*
mso*

symsrv.ini는 symsrv.dll과 동일한 디렉터리에 있어야 합니다. 대부분의 설치에서는 파일이 없으므로 새 파일을 만들어야 합니다.

또는 레지스트리에서 제외할 파일을 저장할 수 있습니다. HKEY_LOCAL_MACHINE\Software\Microsoft\Symbol Server\Exclusions와 같이 레지스트리 키를 만듭니다. 각 파일 이름을 이 키 내에 문자열 값(REG_SZ)으로 저장합니다. 문자열 값의 이름은 제외할 파일의 이름을 지정합니다. 문자열 값의 내용을 사용하여 파일이 제외되는 이유를 설명하는 주석을 저장할 수 있습니다.

설치

SymSrv(symsrv.dll) 기호 서버는 Windows용 디버깅 도구 패키지에 포함되어 있습니다. 로드하는 dbghelp.dll 사본과 동일한 디렉터리에 설치해야 합니다. 자세한 내용은 DbgHelp 라이브러리 호출을 참조하세요.