고급 SymSrv 사용
SymSrv는 중앙 집중식 기호 저장소에서 기호 파일을 배달할 수 있습니다. 이 저장소에는 임의의 수의 프로그램 또는 운영 체제에 해당하는 기호 파일이 포함될 수 있습니다. 저장소에는 이진 파일도 포함될 수 있습니다(미니덤프를 디버깅할 때 유용합니다).
저장소는 실제 기호 및 이진 파일을 포함하거나 기호 파일에 대한 포인터만 포함할 수 있습니다. 저장소에 포인터가 포함된 경우 SymSrv는 소스에서 직접 실제 파일을 검색합니다.
또한 SymSrv를 사용하여 큰 기호 저장소를 특수 디버깅 작업에 적합한 작은 하위 집합으로 구분할 수도 있습니다.
마지막으로 SymSrv는 운영 체제에서 제공하는 로그온 정보를 사용하여 HTTP 또는 HTTPS 소스에서 기호 파일을 가져올 수 있습니다. SymSrv는 스마트 카드, 인증서 및 일반 로그인과 암호로 보호되는 HTTPS 사이트를 지원합니다. 자세한 내용은 HTTP 기호 저장소를 참조 하세요.
기호 경로 설정
이 기호 서버를 사용하려면 디버거와 동일한 디렉터리에 symsrv.dll 설치해야 합니다. 기호 경로는 다음 코드와 같이 설정할 수 있습니다.
set _NT_SYMBOL_PATH = symsrv*ServerDLL*DownstreamStore*\\Server\Share
set _NT_SYMBOL_PATH = symsrv*ServerDLL*\\Server\Share
set _NT_SYMBOL_PATH = srv*DownstreamStore*\\Server\Share
set _NT_SYMBOL_PATH = srv*\\Server\Share
이 구문의 부분은 다음과 같이 설명됩니다.
symsrv
이 키워드는 항상 먼저 표시되어야 합니다. 이 항목은 일반 기호 디렉터리가 아니라 기호 서버임을 디버거에 나타냅니다.
ServerDLL
기호 서버 DLL의 이름을 지정합니다. SymSrv 기호 서버를 사용하는 경우 항상 symsrv.dll.
srv
이는 symsrv*symsrv.dll 약식입니다.
DownstreamStore
다운스트림 저장소를 지정합니다. 개별 기호 파일을 캐시하는 데 사용되는 로컬 디렉터리 또는 네트워크 공유입니다.
별표로 구분하여 둘 이상의 다운스트림 저장소를 지정할 수 있습니다. 여러 다운스트림 저장소는 이 페이지에서 더 아래로 계단식 다운스트림 저장소에 설명되어 있습니다.
다운스트림 저장소가 일반적으로 지정되는 두 개의 별표가 행에 포함된 경우 기본 다운스트림 저장소가 사용됩니다. 이 저장소는 홈 디렉터리의 sym 하위 디렉터리에 있습니다. 홈 디렉터리의 기본값은 디버거 설치 디렉터리입니다. !homedir 확장을 사용하거나 DBGHELP_HOMEDIR 환경 변수를 설정하여 변경할 수 있습니다.
DownstreamStore가 존재하지 않는 디렉터리를 지정하면 SymStore에서 디렉터리를 만들려고 시도합니다.
DownstreamStore 매개 변수를 생략하고 추가 별표가 포함되지 않은 경우( 즉, 정확히 두 개의 별표가 있는 별표 또는 symsrv가 있는 symsrv가 있는 srv를 사용하는 경우) 다운스트림 저장소가 생성되지 않습니다. 디버거는 모든 기호 파일을 로컬로 캐싱하지 않고 서버에서 직접 로드합니다.
참고 : HTTP 또는 HTTPS 사이트에서 기호에 액세스하거나 기호 저장소에서 압축된 파일을 사용하는 경우 항상 다운스트림 저장소가 사용됩니다. 다운스트림 저장소를 지정하지 않으면 홈 디렉터리의 sym 하위 디렉터리에 해당 저장소가 만들어집니다.
\\Server\Share
원격 기호 저장소의 서버 및 공유를 지정합니다.
다운스트림 저장소를 사용하는 경우 디버거는 먼저 이 저장소에서 기호 파일을 찾습니다. 기호 파일을 찾을 수 없는 경우 디버거는 지정된 서버 및 공유에서 기호 파일을 찾은 다음 다운스트림 저장소에 이 파일의 복사본을 캐시합니다. 파일은 \\Server\Share 아래 트리의 위치에 해당하는 DownstreamStore 아래 트리의 하위 디렉터리에 복사됩니다.
기호 서버가 기호 경로의 유일한 항목일 필요는 없습니다. 기호 경로가 여러 항목으로 구성된 경우 디버거는 기호 서버 또는 실제 디렉터리의 이름이 지정되었는지 여부에 관계없이 필요한 기호 파일의 각 항목을 왼쪽에서 오른쪽으로 순서대로 확인합니다.
다음 몇 가지 예를 참조하십시오. \\mybuilds\mysymbols에 기호 저장소가 있는 기호 서버로 SymSrv를 사용하려면 다음 기호 경로를 설정합니다.
set _NT_SYMBOL_PATH= symsrv*symsrv.dll*\\mybuilds\mysymbols
디버거가 \\mybuilds\mysymbols의 기호 저장소에서 로컬 디렉터리 c:\localsymbols로 기호 파일을 복사하도록 기호 경로를 설정하려면 다음을 사용합니다.
set _NT_SYMBOL_PATH=symsrv*symsrv.dll*c:\localsymbols*\\mybuilds\mysymbols
디버거가 HTTPS 사이트의 https://www.company.com/manysymbols
기호 파일을 로컬 네트워크 디렉터리 \\localserver\myshare\mycache로 복사하도록 기호 경로를 설정하려면 다음을 사용합니다.
set _NT_SYMBOL_PATH=symsrv*symsrv.dll*\\localserver\myshare\mycache*https://www.company.com/manysymbols
이 마지막 예제는 다음과 같이 단축할 수도 있습니다.
set _NT_SYMBOL_PATH=srv*\\localserver\myshare\mycache*https://www.company.com/manysymbols
또한 기호 경로에는 세미콜론으로 구분된 여러 디렉터리 또는 기호 서버가 포함될 수 있습니다. 이렇게 하면 여러 위치(또는 여러 기호 서버)에서 기호를 찾을 수 있습니다. 이진 파일에 일치하지 않는 기호 파일이 있는 경우 디버거는 정확한 매개 변수만 확인하므로 기호 서버를 사용하여 찾을 수 없습니다. 그러나 디버거는 기존 기호 경로를 사용하여 올바른 이름의 일치하지 않는 기호 파일을 찾아 성공적으로 로드할 수 있습니다. 파일이 기술적으로 올바른 기호 파일이 아니더라도 유용한 정보를 제공할 수 있습니다.
캐시 삭제
DownstreamStore를 캐시로 사용하는 경우 디스크 공간을 절약하기 위해 언제든지 이 디렉터리를 삭제할 수 있습니다.
다양한 프로그램 또는 Windows 버전용 기호 파일이 있는 방대한 기호 저장소가 있을 수 있습니다. 대상 컴퓨터에서 사용되는 Windows 버전을 업그레이드하면 캐시된 기호 파일이 모두 이전 버전과 일치됩니다. 캐시된 파일은 이후에 다시 사용되지 않으므로 이 단계에서 캐시를 삭제하는 것이 좋습니다.
계단식 다운스트림 저장소
별표로 구분하여 원하는 수의 다운스트림 저장소를 지정할 수 있습니다. 이러한 저장소는 계단식 기호 저장소라고합니다.
초기 srv*
또는 symsrv*ServerDLL*
이후의 각 후속 토큰은 기호 위치를 나타냅니다. 가장 먼 토큰이 먼저 선택됩니다. 두 개의 별표로 행 또는 문자열 끝에 있는 별표로 표시되는 빈 토큰은 기본 다운스트림 저장소를 나타냅니다.
다음은 액세스 중인 기본 기호 저장소의 정보를 보관하기 위해 두 개의 다운스트림 저장소를 사용하는 기호 경로의 예입니다. 마스터 저장소, 중간 수준 저장소 및 로컬 캐시라고 할 수 있습니다.
srv*c:\localcache*\\interim\store*https://msdl.microsoft.com/download/symbols
이 시나리오에서 SymSrv는 먼저 c:\localcache에서 기호 파일을 찾습니다. 해당 경로가 발견되면 경로가 반환됩니다. 찾을 수 없으면 \\interim\store에서 표시됩니다. 기호 파일이 있으면 SymSrv는 해당 파일을 c:\localcache에 복사하고 경로를 반환합니다. 찾을 수 없으면 SymSrv는 Microsoft 공용 기호 저장소를 https://msdl.microsoft.com/download/symbols찾습니다. 파일이 있는 경우 SymSrv는 \\interim\store 및 c:\localcache 모두에 복사합니다.
다음 경로를 사용하여 유사한 동작을 가져옵니다.
srv**\\interim\store*https://internetsite
이 경우 로컬 캐시는 기본 다운스트림 저장소이며 마스터 저장소는 인터넷 사이트입니다. \\interim\store의 중간 수준 저장소가 다른 두 저장소 사이에 사용하도록 지정되었습니다.
SymSrv는 연계 저장소가 포함된 경로를 처리할 때 읽거나 쓸 수 없는 모든 저장소를 건너뜁니다. 따라서 공유가 중단되면 오류 없이 누락된 저장소에서 저장소 다운스트림으로 파일을 복사합니다. 이 오류의 좋은 부작용은 사용자가 마스터 저장소를 쓸 수 없는 한 다운스트림 저장소의 단일 스트림을 공급하는 둘 이상의 마스터 저장소를 지정할 수 있다는 것입니다.
마스터 저장소에서 압축된 기호 파일을 검색하면 중간 수준 저장소에 압축된 형식으로 저장됩니다. 파일은 경로의 최하위 저장소에서 압축되지 않습니다.
HTTP 및 SMB 기호 서버 경로 작업
앞에서 설명한 것처럼 연결(또는 연계)은 기호 경로의 각 "*" 구분 기호 간에 발생하는 복사본을 나타냅니다. 기호는 왼쪽에서 오른쪽 순서로 검색됩니다. 누락될 때마다 파일을 찾을 때까지 다음(업스트림) 기호 서버가 쿼리됩니다.
파일이 있으면 (업스트림) 기호 서버에서 이전(다운스트림) 기호 서버로 복사됩니다. 이는 각(다운스트림) 기호 서버에 대해 반복됩니다. 이러한 방식으로 (공유) 다운스트림 기호 서버는 기호 서버를 사용하는 모든 클라이언트의 공동 작업으로 채워집니다.
SRV* 접두사 없이 연결된 UNC 경로를 사용할 수 있지만 symsrv.dll 고급 오류 처리를 사용할 수 있도록 SRV*를 지정하는 것이 좋습니다.
경로에 HTTP 기호 서버를 포함하는 경우 하나만 지정할 수 있으며(체인당) 경로의 끝에 있어야 합니다(캐시로 사용할 수 없으므로). HTTP 기반 기호 저장소가 저장소 목록의 중간 또는 왼쪽에 있는 경우 찾은 파일을 복사할 수 없으며 체인이 끊어집니다. 또한 기호 처리기는 웹 사이트에서 파일을 열 수 없으므로 HTTP 기반 저장소가 가장 왼쪽에 있어서는 안 되며 목록에 해당 저장소만 있어서는 안 됩니다. SymSrv에 이 기호 경로가 표시되면 기본 다운스트림 저장소가 기호 경로에 표시되는지 여부에 관계없이 기본 다운스트림 저장소에 파일을 복사하여 복구를 시도하고 해당 위치에서 엽니다.
HTTP는 SRV* 접두사(symsrv.dll 기호 처리기에서 구현)를 사용하는 경우에만 지원됩니다.
HTTP 및 SMB 공유 기호 서버 시나리오 예제
일반적인 UNC 전용 배포에는 모든 파일(\\MainOffice\Symbols), 하위 집합을 캐싱하는 지사(\\BranchOfficeA\Symbols) 및 참조하는 파일을 캐싱하는 데스크톱(C:\Symbols)을 호스트하는 중앙 사무실이 포함됩니다.
srv*C:\Symbols*\\BranchOfficeA\Symbols*\\MainOffice\Symbols
SMB 공유가 기본(업스트림) 기호 저장소인 경우 읽기가 필요합니다.
srv*C:\Symbols*\\MachineName\Symbols
SMB 공유가 중간(다운스트림) 기호 저장소인 경우 읽기/변경이 필요합니다. 클라이언트는 기본 기호 저장소에서 SMB 공유로 파일을 복사한 다음 SMB 공유에서 로컬 폴더로 복사합니다.
srv*C:\Symbols*\\MachineName\Symbols*https://msdl.microsoft.com/download/symbols
srv*C:\Symbols*\\MachineName\Symbols*\\MainOffice\Symbols
SMB 공유가 SymProxy 배포의 중간(다운스트림) 기호 저장소인 경우 읽기만 필요합니다. SymProxy ISAPI 필터는 클라이언트가 아닌 쓰기를 수행합니다.
srv*C:\Symbols*\\MachineName\Symbols*https://SymProxyName/Symbols
여러 HTTP 및 SMB 공유 기호 서버 캐시 시나리오
기호 서버 및 캐시 위치의 여러 체인을 세미 콜론 ";"으로 구분하여 지정할 수 있습니다. 기호가 첫 번째 체인에 있는 경우 두 번째 체인은 트래버스되지 않습니다. 기호가 첫 번째 체인에 없는 경우 두 번째 체인이 트래버스되고 기호가 두 번째 체인에 있으면 지정된 위치에 캐시됩니다. 이 방법을 사용하면 첫 번째 체인에 지정된 기본 기호 서버에서 기호를 사용할 수 없는 경우에만 보조 서버가 사용되는 기본 기호 서버를 일반적으로 사용할 수 있습니다.
srv*C:\Symbols*\\Machine1\Symbols*https://SymProxyName/Symbols;srv*C:\WebSymbols*https://msdl.microsoft.com/download/symbols
cache*localsymbolcache
기호의 로컬 캐시를 만드는 또 다른 방법은 기호 경로에 문자열을 cache*localsymbolcache
사용하는 것입니다. 기호 서버 요소의 일부가 아니라 기호 경로의 별도 요소입니다. 디버거는 지정된 디렉터리 localsymbolcache 를 사용하여 이 문자열의 오른쪽에 있는 기호 경로에 나타나는 요소에서 로드된 모든 기호를 저장합니다. 이렇게 하면 기호 서버에서 다운로드한 기호뿐만 아니라 모든 위치에서 다운로드한 기호에 로컬 캐시를 사용할 수 있습니다.
예를 들어 다음 기호 경로는 \\someshare에서 가져온 기호를 캐시하지 않습니다. \\anothershare로 시작하는 요소가 cache*c:\mysymbols 요소의 오른쪽에 나타나므로 c:\mysymbols를 사용하여 \\anothershare에서 가져온 기호를 캐시합니다. 또한 기호 서버에서 사용하는 일반적인 구문(별표가 두 개 이상 있는 srv )으로 인해 c:\mysymbols를 사용하여 Microsoft 공용 기호 저장소에서 가져온 기호를 캐시합니다. 또한 이후에 .sympath+ 명령을 사용하여 이 경로에 위치를 추가하는 경우 이러한 새 요소도 경로의 오른쪽에 추가되므로 캐시됩니다.
_NT_SYMBOL_PATH=\\someshare\that\cachestar\ignores;srv*c:\mysymbols*https://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached
SymSrv에서 파일을 찾는 방법
SymSrv는 원하는 기호 파일에 대한 정규화된 UNC 경로를 만듭니다. 이 경로는 _NT_SYMBOL_PATH 환경 변수에 기록된 기호 저장소의 경로로 시작합니다. 그런 다음 SymbolServer 루틴을 사용하여 원하는 파일의 이름을 식별합니다. 이 이름은 경로에 디렉터리 이름으로 추가됩니다. 그런 다음 SymbolServer에 전달된 ID, 2개 및 3개의 매개 변수의 연결로 구성된 다른 디렉터리 이름이 추가됩니다. 이러한 값이 0이면 생략됩니다.
결과 디렉터리가 기호 파일 또는 기호 저장소 포인터 파일을 검색합니다.
이 검색에 성공하면 SymbolServer가 호출자에게 경로를 전달하고 TRUE를 반환합니다. 파일을 찾을 수 없으면 SymbolServer는 FALSE를 반환합니다.
AgeStore를 사용하여 캐시 크기 줄이기
AgeStore 도구를 사용하여 지정된 날짜보다 오래된 캐시된 파일을 삭제하거나 캐시 내용을 지정된 크기 이하로 줄일 수 있습니다. 다운스트림 저장소가 너무 큰 경우에 유용할 수 있습니다. 자세한 내용은 AgeStore를 참조하세요.