다음을 통해 공유


기호 스토리지 형식

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이 생성, 삭제 또는 변경될 수 있습니다.