다음을 통해 공유


기호 스토리지 형식

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

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

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. refs.ptr- 현재 기호 저장소에 추가된 이 타임스탬프 및 이미지 크기가 있는 acpi.dbg의 모든 현재 위치 목록을 포함합니다.

\\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"과 함께 추가되었음을 보여 줍니다.

일부 기호 파일은 다양한 제품이나 빌드 또는 특정 제품을 통해 일정하게 유지됩니다. 한 가지 예로 Windows 2000 파일 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에 저장된 Windows 2000용 여러 기호 빌드에 동일한 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,\\MyDir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\foo2\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에는 "\\foo2\bin\symbols\retail\dll\dbghelp.dbg"가 포함되고 refs.ptr에는

0000000046,ptr,\\MyDir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\foo2\bin\symbols\retail\dll\dbghelp.dbg

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