기호 경로

DbgHelp 라이브러리는 기호 검색 경로를 사용하여 디버그 기호(.pdb 및 .dbg 파일)를 찾습니다. 검색 경로는 세미콜론으로 구분된 하나 이상의 경로 요소로 구성될 수 있습니다.

검색 경로 지정

기호 처리기가 디스크 디렉터리에서 기호 파일을 검색할 위치를 지정하려면 SymSetSearchPath 함수를 호출합니다. 또는 SymInitialize 함수의 UserSearchPath 매개 변수에서 기호 검색 경로를 지정할 수 있습니다.

SymInitializeUserSearchPath 매개 변수와 SymSetSearchPathSearchPath 매개 변수는 경로를 지정하는 null로 끝나는 문자열 또는 세미콜론으로 구분된 일련의 경로에 대한 포인터를 사용합니다. 기호 처리기는 이러한 경로를 사용하여 기호 파일을 검색합니다. 이 매개 변수가 NULL인 경우 기호 처리기는 기호가 검색되는 모듈이 포함된 디렉터리를 검색합니다. 그렇지 않으면 이 매개 변수가 NULL이 아닌 값으로 지정된 경우 기호 처리기는 먼저 모듈 디렉터리를 검색하기 전에 애플리케이션에서 설정한 경로를 검색합니다. _NT_SYMBOL_PATH 또는 _NT_ALT_SYMBOL_PATH 환경 변수를 설정하는 경우 기호 처리기는 다음 순서로 기호 파일을 검색합니다.

  1. _NT_SYMBOL_PATH 환경 변수.
  2. _NT_ALT_SYMBOL_PATH 환경 변수.
  3. 해당 모듈을 포함하는 디렉터리.

검색 경로를 검색하려면 SymGetSearchPath 함수를 호출합니다.

프로그램 데이터베이스(.pdb) 파일의 검색 경로는 디버그(.dbg) 파일의 경로와 다릅니다. 알고리즘은 기호 라이브러리의 기능에 따라 결정됩니다. 기본적으로 Microsoft Visual C/C++는 Microsoft 형식 기호를 만들고, 이미지에서 제거하고, 별도의 .pdb 파일에 배치합니다. 일반적으로 .pdb 파일은 실행 가능한 파일이 포함된 디렉터리에 있습니다. Visual C/C++는 실행 가능한 파일 이미지에 .pdb 파일의 절대 경로를 포함합니다. 기호 처리기가 해당 위치에서 .pdb 파일을 찾을 수 없거나 .pdb 파일이 다른 디렉터리로 이동된 경우 기호 처리기는 .dbg 파일에 대해 설명된 검색 경로를 사용하여 .pdb 파일을 찾습니다.

경로 요소 형식

경로 요소에는 세 가지 유형이 있습니다.

표준 경로 요소

표준 경로 요소는 경로 요소에 의해 지정된 디렉터리의 루트를 확인하여 검색됩니다. 또한 기호 처리기는 기호를 찾고 있는 모듈의 파일 확장명과 일치하는 "기호"의 하위 디렉터리를 찾습니다. 이는 일반적으로 "dll", "exe" 또는 "sys"입니다. 마지막으로 확장명과 같은 이름의 디렉터리가 있는 "기호"라는 하위 디렉터리를 찾습니다. 예를 들어 기호 경로 요소가 "c:\mySymbols"이고 기호가 검색되는 파일이 "boo.dll"인 경우 다음 디렉터리가 검색됩니다.

  • c:\mySymbols
  • c:\mySymbols\dll
  • c:\mySymbols\symbols\dll

기호 처리기는 이 논리를 사용하여 조건을 충족하지 않는 경로 요소를 기호 서버 또는 캐시로 검색합니다(아래에 설명됨).

기호 서버 경로 요소

기호 서버 경로 요소는 문제의 모듈과 정확히 일치하는 기호를 찾을 수 있는 특수 기술을 사용합니다. 자세한 내용은 SymSrv 사용을 참조하세요.

기호 처리기는 "srv*" 텍스트로 시작하는 경우 경로 요소를 기호 서버로 처리합니다.

참고

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

 

캐시 경로 요소

캐시 경로 요소는 기호 서버 경로 요소의 변형입니다.

이 디렉터리는 다른 기호 서버처럼 검색됩니다. 그러나 여기에 기호가 없고 기호 경로 체인에서 더 멀리 떨어진 경로 요소에 있는 경우 기호가 복사되어 이 요소에 지정된 기호 서버에 저장됩니다.

기호 처리기는 경로 요소를 "cache*" 텍스트로 시작하는 경우 캐시 요소로 처리합니다. "c:\myCache"에서 캐시를 지정하려면 "cache*c:\myCache"의 기호 경로 요소를 사용합니다.

예제 검색 쿼리

해당 작동 방식을 확인하려면 이 검색 경로를 설정합니다.

cache*c:\myCache;srv*\\symbols\symbols

다음은 위에 나열된 검색 경로를 사용하여 ntdll.pdb를 검색하는 동안 기호 처리기의 자세한 정보 출력 목록입니다.

DBGHELP: .\ntdll.pdb - file not found
DBGHELP: .\dll\ntdll.pdb - file not found
DBGHELP: .\symbols\dll\ntdll.pdb - file not found
SYMSRV: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb not found
SYMSRV: ntdll.pdb from \\symbols\symbols: 10497024 bytes - copied
DBGHELP: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb already cached
DBGHELP: ntdll - private symbols & lines
c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb

출력의 처음 세 줄에서 .의 첫 번째 경로 요소를 처리하는 기호 처리기를 보여 줍니다. 이는 표준 경로 요소입니다.

네 번째 줄에서는 기호 서버를 사용하여 캐시 경로 요소인 두 번째 경로 요소 cache*c:\myCache에서 파일을 찾는 기호 처리기를 보여 줍니다.

다섯 번째 줄에서는 기호 서버 경로 요소인 세 번째 경로 요소 srv*\\symbols\symbols에서 파일이 발견되었음을 보여 줍니다.

여섯 번째 줄에서는 파일이 캐시에 복사되었음을 보여줍니다.

이는 파일이 캐시에서 열린 마지막 두 줄입니다.