다음을 통해 공유


SymStore 사용

SymStore(symstore.exe)는 기호 저장소를 만들기 위한 도구입니다. Windows 패키지용 디버깅 도구에 포함되어 있습니다.

SymStore는 디버거가 이미지의 타임스탬핑 및 크기(.dbg 또는 실행 파일의 경우) 또는 서명 및 나이(.pdb 파일의 경우)에 따라 기호를 조회할 수 있도록 하는 형식으로 기호를 저장합니다. 기존 기호 스토리지 형식에 비해 기호 저장소의 장점은 모든 기호를 동일한 서버에 저장하거나 참조하고 해당 기호가 포함된 제품에 대한 사전 지식 없이 디버거에서 검색할 수 있다는 것입니다.

여러 버전의 .pdb 기호 파일(예: 퍼블릭 및 프라이빗 버전)은 각각 동일한 서명과 나이를 포함하므로 동일한 서버에 저장할 수 없습니다.

SymStore 트랜잭션

SymStore에 대한 모든 호출은 트랜잭션으로 기록됩니다. 트랜잭션에는 추가 및 삭제의 두 가지 유형이 있습니다.

기호 저장소를 만들면 서버의 루트 아래에 "000admin"이라는 디렉터리가 만들어집니다. 000admin 디렉터리에는 각 트랜잭션에 대해 하나의 파일과 Server.txt 및 History.txt로그 파일이 포함됩니다. Server.txt 파일에는 현재 서버에 있는 모든 트랜잭션 목록이 포함되어 있습니다. History.txt 파일에는 모든 트랜잭션의 시간 기록이 포함됩니다.

SymStore가 기호 파일을 저장하거나 제거할 때마다 새 트랜잭션 번호가 생성됩니다. 그런 다음, 이름이 이 트랜잭션 번호인 파일이 000admin으로 만들어집니다. 이 파일에는 이 트랜잭션 중에 기호 저장소에 추가된 모든 파일 또는 포인터 목록이 포함됩니다. 트랜잭션이 삭제되면 SymStore는 해당 트랜잭션 파일을 읽어 삭제해야 하는 파일과 포인터를 결정합니다.

추가del 옵션은 추가 또는 삭제 트랜잭션을 수행할지 여부를 지정합니다. 추가 작업에 /p 옵션을 포함하면 포인터를 추가할 수 있습니다. /p 옵션을 생략하면 실제 기호 파일을 추가할 수 있습니다.

두 단계로 기호 저장소를 만들 수도 있습니다. 첫 번째 단계에서는 /x 옵션과 함께 SymStore를 사용하여 인덱스 파일을 만듭니다. 두 번째 단계에서는 /y 옵션과 함께 SymStore를 사용하여 인덱스 파일의 정보에서 파일 또는 포인터의 실제 저장소를 만듭니다.

다양한 이유로 유용한 기술이 될 수 있습니다. 예를 들어 인덱스 파일이 여전히 존재하는 한 저장소가 손실된 경우 기호 저장소를 쉽게 다시 만들 수 있습니다. 또는 기호 파일이 포함된 컴퓨터가 기호 저장소를 만들 컴퓨터에 대한 네트워크 연결 속도가 느릴 수 있습니다. 이 경우 기호 파일과 동일한 컴퓨터에 인덱스 파일을 만들고 인덱스 파일을 두 번째 컴퓨터로 전송한 다음 두 번째 컴퓨터에 저장소를 만들 수 있습니다.

모든 SymStore 매개 변수의 전체 목록은 SymStore Command-Line 옵션참조하세요.

메모

SymStore는 여러 사용자의 동시 트랜잭션을 지원하지 않습니다. 한 사용자가 기호 저장소의 "관리자"로 지정되고 모든 추가del 트랜잭션을 담당하는 것이 좋습니다.

 

트랜잭션 예제

다음은 Windows Server 2003 빌드 3790에 대한 기호 포인터를 \\sampledir\symsrv에 추가하는 SymStore의 두 가지 예입니다.

symstore add /r /p /f \\BuildServer\BuildShare\3790free\symbols\*.*
   /s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 free"
   /c "Sample add"
symstore add /r /p /f \\BuildServer\BuildShare\3790Chk\symbols\*.* 
   /s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 checked"
   /c "Sample add"

다음 예제에서 SymStore는 \\largeapp\appserver\bins의 애플리케이션 프로젝트에 대한 실제 기호 파일을 \\testdir\symsrv에 추가합니다.

symstore add /r /f \\largeapp\appserver\bins\*.* /s \\testdir\symsrv 
   /t "Large Application" /v "Build 432" /c "Sample add"

다음은 인덱스 파일을 사용하는 방법의 예입니다. 먼저 SymStore는 \\largeapp\appserver\bins\의 기호 파일 컬렉션을 기반으로 인덱스 파일을 만듭니다. 이 경우 인덱스 파일은 세 번째 컴퓨터 \\hubserver\hubshare에 배치됩니다. /g 옵션을 사용하여 파일 접두사 "\\largeapp\appserver"가 나중에 변경될 수 있도록 지정합니다.

symstore add /r /p /g \\largeapp\appserver /f 
   \\largeapp\appserver\bins\*.* 
   /x \\hubserver\hubshare\myindex.txt

이제 모든 기호 파일을 \\largeapp\appserver 컴퓨터에서 이동하고 \\myarchive\appserver에 배치한다고 가정합니다. 그런 다음 다음과 같이 인덱스 파일 \\hubserver\hubshare\myindex.txt 기호 저장소 자체를 만들 수 있습니다.

symstore add /y \\hubserver\hubshare\myindex.txt 
   /g \\myarchive\appserver /s \\sampledir\symsrv /p 
   /t "Large Application" /v "Build 432" /c "Sample Add from Index"

마지막으로, 이전 트랜잭션에서 추가한 파일을 삭제하는 SymStore의 예는 다음과 같습니다. 트랜잭션 ID를 확인하는 방법에 대한 설명은 다음 섹션을 참조하세요(이 경우 0000000096).

symstore del /i 0000000096 /s \\sampledir\symsrv

압축된 파일

SymStore는 두 가지 방법으로 압축된 파일과 함께 사용할 수 있습니다.

  1. /p 옵션과 함께 SymStore를 사용하여 기호 파일에 대한 포인터를 저장합니다. SymStore가 완료되면 포인터가 참조하는 파일을 압축합니다.
  2. /x 옵션과 함께 SymStore를 사용하여 인덱스 파일을 만듭니다. SymStore가 완료되면 인덱스 파일에 나열된 파일을 압축합니다. 그런 다음 /y 옵션(그리고 원하는 경우 /p 옵션)과 함께 SymStore를 사용하여 기호 저장소의 파일에 대한 파일 또는 포인터를 저장합니다. (SymStore는 이 작업을 수행하기 위해 파일의 압축을 풀 필요가 없습니다.)

기호 서버는 필요할 때 파일의 압축을 해제해야 합니다.

SymSrv를 기호 서버로 사용하는 경우 Microsoft Windows SDK(소프트웨어 개발 키트)와 함께 배포되는 compress.exe 도구를 사용하여 압축을 수행해야 합니다. 압축된 파일은 파일 확장명에서 마지막 문자로 밑줄이 있어야 합니다(예: module1.pd_ 또는 module2.db_). 자세한 내용은 SymSrv 사용하는참조하세요.

server.txt 및 history.txt 파일

트랜잭션이 추가되면 향후 조회 기능을 위해 server.txt 및 history.txt 여러 정보 항목이 추가됩니다. 다음은 추가 트랜잭션에 대한 server.txt 및 history.txt 줄의 예입니다.

0000000096,add,ptr,10/09/99,00:08:32,Windows XP,x86 fre 1.156c-RTM-2,Added from \\mybuilds\symbols,

쉼표로 구분된 줄입니다. 필드는 다음과 같이 정의됩니다.

분야 묘사
0000000096 SymStore에서 만든 트랜잭션 ID 번호입니다.
더하다 트랜잭션 유형입니다. 이 필드는 을 추가하거나 에서을 삭제할 수 있습니다.
ptr 파일 또는 포인터가 추가되었는지 여부입니다. 이 필드는 파일 또는 ptr가 될 수 있습니다.
10/09/99 트랜잭션이 발생한 날짜입니다.
00:08:32 트랜잭션이 시작된 시간입니다.
Windows XP 제품.
x86 fre 버전(선택 사항).
에서 추가됨 주석(선택 사항)
사용되지 않은 (나중에 사용하도록 예약됨.)

 

다음은 트랜잭션 파일 0000000096 몇 가지 샘플 줄입니다. 각 줄은 디렉터리와 디렉터리에 추가된 파일 또는 포인터의 위치를 기록합니다.

canon800.dbg\35d9fd51b000,\\mybuilds\symbols\sp4\dll\canon800.dbg
canonlbp.dbg\35d9fd521c000,\\mybuilds\symbols\sp4\dll\canonlbp.dbg
certadm.dbg\352bf2f48000,\\mybuilds\symbols\sp4\dll\certadm.dbg
certcli.dbg\352bf2f1b000,\\mybuilds\symbols\sp4\dll\certcli.dbg
certcrpt.dbg\352bf04911000,\\mybuilds\symbols\sp4\dll\certcrpt.dbg
certenc.dbg\352bf2f7f000,\\mybuilds\symbols\sp4\dll\certenc.dbg

del 트랜잭션을 사용하여 원래 add 트랜잭션을 취소하면 이러한 줄이 server.txt에서 제거되고, 다음 줄이 history.txt에 추가됩니다.

0000000105,del,0000000096

삭제 트랜잭션에 대한 필드는 다음과 같이 정의됩니다.

필드 묘사
0000000105 SymStore에서 만든 트랜잭션 ID 번호입니다.
트랜잭션 유형입니다. 이 필드는 을(를)에 추가하거나, 에서을(를) 삭제할 수 있습니다.
0000000096 삭제된 트랜잭션입니다.

 

기호 스토리지 형식

SymStore는 파일 시스템 자체를 데이터베이스로 사용합니다. 기호 파일 타임스탬프를 기반으로 하는 디렉터리 이름, 서명, 나이 및 기타 데이터와 같은 디렉터리의 큰 트리를 만듭니다.

예를 들어 여러 다른 acpi.dbg 파일이 서버에 추가된 후 디렉터리 모양은 다음과 같습니다.

Directory of \\mybuilds\symsrv\acpi.dbg
10/06/1999  05:46p      <DIR>          .
10/06/1999  05:46p      <DIR>          ..
10/04/1999  01:54p      <DIR>          37cdb03962040
10/04/1999  01:49p      <DIR>          37cdb04027740
10/04/1999  12:56p      <DIR>          37e3eb1c62060
10/04/1999  12:51p      <DIR>          37e3ebcc27760
10/04/1999  12:45p      <DIR>          37ed151662060
10/04/1999  12:39p      <DIR>          37ed15dd27760
10/04/1999  11:33a      <DIR>          37f03ce962020
10/04/1999  11:21a      <DIR>          37f03cf7277c0
10/06/1999  05:38p      <DIR>          37fa7f00277e0
10/06/1999  05:46p      <DIR>          37fa7f01620a0

이 예제에서 acpi.dbg 기호 파일의 조회 경로는 \\mybuilds\symsrv\acpi.dbg\37cdb03962040과 같이 표시될 수 있습니다.

조회 디렉터리 내에 다음 세 개의 파일이 있을 수 있습니다.

  1. 파일이 저장된 경우 acpi.dbg가 존재합니다.
  2. 포인터가 저장된 경우 file.ptr이라는 파일이 존재하고 실제 기호 파일의 경로를 포함합니다.
  3. 이 타임스탬프가 있는 acpi.dbg의 모든 현재 위치 목록과 현재 기호 저장소에 추가된 이미지 크기를 포함하는 refs.ptr이라는 파일입니다.

\\mybuilds\symsrv\acpi.dbg\37cdb03962040의 디렉터리 목록을 표시하면 다음이 제공됩니다.

10/04/1999  01:54p                  52 file.ptr
10/04/1999  01:54p                  67 refs.ptr

file.ptr에는 "\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg" 텍스트 문자열이 포함되어 있습니다. 이 디렉터리에 acpi.dbg라는 파일이 없으므로 디버거는 \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg에서 파일을 찾으려고 합니다.

refs.ptr의 내용은 디버거가 아닌 SymStore에서만 사용됩니다. 이 파일에는 이 디렉터리에서 발생한 모든 트랜잭션의 레코드가 포함됩니다. refs.ptr의 샘플 줄은 다음과 같습니다.

0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg

\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg에 대한 포인터가 트랜잭션 "0000000026"과 함께 추가되었음을 보여 줍니다.

일부 기호 파일은 다양한 제품이나 빌드 또는 특정 제품을 통해 일정하게 유지됩니다. 이 중 한 가지 예는 msvcrt.pdb 파일입니다. \\mybuilds\symsrv\msvcrt.pdb 디렉터리를 수행하면 두 버전의 msvcrt.pdb만 기호 서버에 추가된 것으로 표시됩니다.

Directory of \\mybuilds\symsrv\msvcrt.pdb
10/06/1999  05:37p      <DIR>          .
10/06/1999  05:37p      <DIR>          ..
10/04/1999  11:19a      <DIR>          37a8f40e2
10/06/1999  05:37p      <DIR>          37f2c2272

그러나 \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 디렉터리를 수행하면 refs.ptr에 여러 포인터가 있음을 알 수 있습니다.

Directory of \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2
10/05/1999  02:50p              54     file.ptr
10/05/1999  02:50p           2,039     refs.ptr

\\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr의 내용은 다음과 같습니다.

0000000001,ptr,\\mybuilds\symbols\x86\2137\symbols\dll\msvcrt.pdb
0000000002,ptr,\\mybuilds\symbols\x86\2137.chk\symbols\dll\msvcrt.pdb
0000000003,ptr,\\mybuilds\symbols\x86\2138\symbols\dll\msvcrt.pdb
0000000004,ptr,\\mybuilds\symbols\x86\2138.chk\symbols\dll\msvcrt.pdb
0000000005,ptr,\\mybuilds\symbols\x86\2139\symbols\dll\msvcrt.pdb
0000000006,ptr,\\mybuilds\symbols\x86\2139.chk\symbols\dll\msvcrt.pdb
0000000007,ptr,\\mybuilds\symbols\x86\2140\symbols\dll\msvcrt.pdb
0000000008,ptr,\\mybuilds\symbols\x86\2140.chk\symbols\dll\msvcrt.pdb
0000000009,ptr,\\mybuilds\symbols\x86\2136\symbols\dll\msvcrt.pdb
0000000010,ptr,\\mybuilds\symbols\x86\2136.chk\symbols\dll\msvcrt.pdb
0000000011,ptr,\\mybuilds\symbols\x86\2135\symbols\dll\msvcrt.pdb
0000000012,ptr,\\mybuilds\symbols\x86\2135.chk\symbols\dll\msvcrt.pdb
0000000013,ptr,\\mybuilds\symbols\x86\2134\symbols\dll\msvcrt.pdb
0000000014,ptr,\\mybuilds\symbols\x86\2134.chk\symbols\dll\msvcrt.pdb
0000000015,ptr,\\mybuilds\symbols\x86\2133\symbols\dll\msvcrt.pdb
0000000016,ptr,\\mybuilds\symbols\x86\2133.chk\symbols\dll\msvcrt.pdb
0000000017,ptr,\\mybuilds\symbols\x86\2132\symbols\dll\msvcrt.pdb
0000000018,ptr,\\mybuilds\symbols\x86\2132.chk\symbols\dll\msvcrt.pdb
0000000019,ptr,\\mybuilds\symbols\x86\2131\symbols\dll\msvcrt.pdb
0000000020,ptr,\\mybuilds\symbols\x86\2131.chk\symbols\dll\msvcrt.pdb
0000000021,ptr,\\mybuilds\symbols\x86\2130\symbols\dll\msvcrt.pdb
0000000022,ptr,\\mybuilds\symbols\x86\2130.chk\symbols\dll\msvcrt.pdb
0000000023,ptr,\\mybuilds\symbols\x86\2129\symbols\dll\msvcrt.pdb
0000000024,ptr,\\mybuilds\symbols\x86\2129.chk\symbols\dll\msvcrt.pdb
0000000025,ptr,\\mybuilds\symbols\x86\2128\symbols\dll\msvcrt.pdb
0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\dll\msvcrt.pdb
0000000027,ptr,\\mybuilds\symbols\x86\2141\symbols\dll\msvcrt.pdb
0000000028,ptr,\\mybuilds\symbols\x86\2141.chk\symbols\dll\msvcrt.pdb
0000000029,ptr,\\mybuilds\symbols\x86\2142\symbols\dll\msvcrt.pdb
0000000030,ptr,\\mybuilds\symbols\x86\2142.chk\symbols\dll\msvcrt.pdb

\\mybuilds\symsrv에 저장된 여러 기호 빌드에 동일한 msvcrt.pdb가 사용되었음을 보여 줍니다.

다음은 파일 및 포인터 추가가 혼합된 디렉터리의 예입니다.

Directory of E:\symsrv\dbghelp.dbg\38039ff439000
10/12/1999  01:54p         141,232     dbghelp.dbg
10/13/1999  04:57p              49     file.ptr
10/13/1999  04:57p             306     refs.ptr

이 경우 refs.ptr에는 다음과 같은 내용이 있습니다.

0000000043,file,e:\binaries\symbols\retail\dll\dbghelp.dbg
0000000044,file,f:\binaries\symbols\retail\dll\dbghelp.dbg
0000000045,file,g:\binaries\symbols\retail\dll\dbghelp.dbg
0000000046,ptr,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg

따라서 트랜잭션 43, 44 및 45는 동일한 파일을 서버에 추가했으며 트랜잭션 46 및 47은 포인터를 추가했습니다. 트랜잭션 43, 44 및 45가 삭제되면 dbghelp.dbg 파일이 디렉터리에서 삭제됩니다. 그러면 디렉터리에 다음 내용이 포함됩니다.

Directory of e:\symsrv\dbghelp.dbg\38039ff439000
10/13/1999  05:01p                   49 file.ptr
10/13/1999  05:01p                 130 refs.ptr

이제 file.ptr에는 "\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg"가 포함되고 refs.ptr에는

0000000046,ptr,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg

refs.ptr의 최종 항목이 포인터일 때마다 file.ptr이 존재하고 연결된 파일의 경로를 포함합니다. refs.ptr의 최종 항목이 파일일 때마다 이 디렉터리에 file.ptr이 없습니다. 따라서 refs.ptr에서 최종 항목을 제거하는 삭제 작업으로 인해 file.ptr이 생성, 삭제 또는 변경될 수 있습니다.