다음을 통해 공유


Windows 디버거의 기호 경로

기호 경로는 WinDbg, KD, CDB 및 NTST와 같은 Windows 디버거가 기호 파일을 찾는 위치를 지정합니다. 기호 및 기호 파일에 대한 자세한 내용은 기호를 참조 하세요.

Microsoft Visual Studio를 비롯한 일부 컴파일러는 기호 파일을 이진 파일과 동일한 디렉터리에 배치합니다. 기호 파일과 확인된 이진 파일에는 디버거가 기호 파일을 자동으로 찾을 수 있는 경로 및 파일 이름 정보가 포함됩니다. 실행 파일이 빌드된 컴퓨터에서 사용자 모드 프로세스를 디버그하고 기호 파일이 원래 위치에 있는 경우 디버거는 기호 경로를 설정하지 않고 기호 파일을 찾을 수 있습니다.

대부분의 다른 상황에서는 기호 파일 위치를 가리키도록 기호 경로를 설정해야 합니다.

.symfix를 사용하여 많은 상황에서 잘 작동하는 공용 Microsoft 공용 기호 서버에 대한 기본 경로를 설정합니다.

기호 경로 구문

디버거의 기호 경로는 세미콜론으로 구분된 여러 디렉터리 경로로 구성된 문자열입니다. 예들 들어 C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB입니다.

상대 경로가 지원됩니다. 그러나 항상 동일한 디렉터리에서 디버거를 시작하지 않는 한 각 경로 앞에 드라이브 문자 또는 네트워크 공유를 추가해야 합니다. 네트워크 공유도 지원됩니다.

기호 경로의 각 디렉터리에 대해 디버거는 세 개의 디렉터리를 찾습니다. 예를 들어 기호 경로가 포함되어 C:\Dir1 있고 디버거가 DLL에 대한 기호 정보를 찾는 경우 디버거는 순서대로 나열된 다음 디렉터리에서 기호 정보를 찾습니다.

  • C:\Dir1\symbols\dll
  • C:\Dir1\dll
  • C:\Dir1

그런 다음 디버거는 기호 경로의 각 디렉터리에 대해 이 프로세스를 반복합니다. 마지막으로 디버거는 현재 디렉터리를 찾은 다음 현재 디렉터리에 추가된 디렉터리를 ..\dll 찾습니다. 디버거는 디버깅 중인 이진 파일에 따라 추가..\dll..\exe하거나 ..\sys추가합니다.

기호 파일에는 날짜 및 타임스탬프를 갖습니다. 디버거는 디버깅 중인 이진 파일의 타임스탬프를 일치시키는 기호를 항상 찾습니다. 이 시퀀스에서 먼저 찾은 잘못된 기호를 사용하여 디버거에 대해 걱정할 필요가 없습니다. 기호 파일을 사용할 수 없는 경우 응답에 대한 자세한 내용은 기호 이름 일치를 참조 하세요.

기호 경로를 설정하는 한 가지 방법은 .sympath 명령을 입력하는 것입니다. 기호 경로를 설정하는 다른 방법은 이 항목의 뒷부분에 있는 기호 경로 제어를 참조하세요.

로컬로 기호 캐시

기호를 로컬로 캐시해야 합니다. 기호를 로컬로 캐시하는 한 가지 방법은 기호 경로를 포함 cache*; 하거나 cache*localsymbolcache;* 포함하는 것입니다.

기호 경로에 문자열을 포함하는 경우 이 문자열 cache*; 의 오른쪽에 나타나는 요소에서 로드된 기호는 로컬 컴퓨터의 기본 기호 캐시 디렉터리에 저장됩니다. 예를 들어 다음 명령은 디버거에게 명명된 \\someshare 네트워크 공유에서 기호를 가져와서 로컬 컴퓨터의 기본 위치에 있는 기호를 캐시하도록 지시합니다.

.sympath cache*;\\someshare

기호 경로에 문자열을 포함하는 경우 이 문자열 cache*localsymbolcache; 의 오른쪽에 나타나는 요소에서 로드된 기호는 localsymbolcache 디렉터리에 저장됩니다.

예를 들어 다음 명령은 디버거에게 네트워크 공유 \\someshare 에서 기호를 가져오고 디렉터리의 기호를 캐시하도록 지시합니다 c:\MySymbols .

.sympath cache*C:\MySymbols;\\someshare

기호 서버 사용: srv*

인터넷 또는 회사 네트워크에 연결된 경우 기호에 액세스하는 가장 효율적인 방법은 공용 Microsoft 공용 기호 서버와 같은 기호 서버를 사용하는 것입니다. 기호 경로에서 다음 문자열 중 하나를 사용하여 기호 서버를 사용할 수 있습니다.

  • srv* 문자열

    기호 경로에 문자열 srv* 을 포함하는 경우 디버거는 기호 서버를 사용하여 기본 기호 저장소에서 기호를 가져옵니다. 예를 들어 다음 명령은 디버거에 기본 기호 저장소에서 기호를 가져와도록 지시합니다. 이러한 기호는 로컬 컴퓨터에 캐시되지 않습니다.

    .sympath srv*
    
  • srv*symbolstore 문자열

    기호 경로에 문자열 srv*symbolstore 을 포함하는 경우 디버거는 기호 서버를 사용하여 symbolstore에서 기호를 가져옵니다. 예를 들어 다음 명령은 Microsoft 기호 서버 저장소에서 기호를 가져오기 위해 디버거에 지시합니다. 이러한 기호는 로컬 컴퓨터에 캐시되지 않습니다.

    .sympath srv*https://msdl.microsoft.com/download/symbols
    
  • srv*localsymbolcache*symbolstore 문자열

    기호 경로에 문자열 srv*localcache*symbolstore 을 포함하는 경우 디버거는 기호 서버를 사용하여 기호 저장소에서 기호를 가져와서 localcache 디렉터리에 캐시합니다. 예를 들어 다음 명령은 Microsoft 기호 서버https://msdl.microsoft.com/download/symbols 에서 기호를 가져와서 기호를 캐시하도록 디버거에 c:\MyServerSymbols지시합니다.

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

컴퓨터에 기호를 수동으로 배치하는 디렉터리가 있는 경우 해당 디렉터리를 기호 서버에서 가져온 기호의 캐시로 사용하지 마세요. 대신 두 개의 별도 디렉터리를 사용합니다. 예를 들어 기호를 c:\MyRegularSymbols 수동으로 배치한 다음 서버에서 가져온 기호의 캐시로 지정할 c:\MyServerSymbols 수 있습니다. 다음 예제에서는 기호 경로에 두 디렉터리를 지정하는 방법을 보여 줍니다.

.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols

기호 서버 및 기호 저장소에 대한 자세한 내용은 사용자 지정 기호 저장소 및 기호 서버를 참조하세요.

cache* 및 srv* 결합

기호 경로에 문자열을 포함하는 경우 이 문자열 cache*; 의 오른쪽에 나타나는 요소에서 로드된 기호는 로컬 컴퓨터의 기본 기호 캐시 디렉터리에 저장됩니다. 예를 들어 다음 명령은 Microsoft 기호 서버 저장소에서 기호를 가져와서 기본 기호 캐시 디렉터리에 캐시하도록 디버거에 지시합니다.

.sympath cache*;srv*https://msdl.microsoft.com/download/symbols

기호 경로에 문자열을 포함하는 경우 이 문자열 cache*localsymbolcache; 의 오른쪽에 나타나는 요소에서 로드된 기호는 localsymbolcache 디렉터리에 저장됩니다.

예를 들어 다음 명령은 디버거에게 Microsoft 기호 서버 저장소에서 기호를 가져와서 디렉터리에 기호를 캐시하도록 지시합니다c:\MySymbols.

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

AgeStore를 사용하여 캐시 크기 줄이기

AgeStore 도구를 사용하여 지정된 날짜보다 오래된 캐시된 파일을 삭제하거나, 결과 캐시 크기가 지정된 크기보다 작도록 충분히 오래된 파일을 삭제할 수 있습니다. 이 캐시 파일 정리는 다운스트림 저장소가 너무 커지면 유용합니다.

지연 기호 로드

디버거의 기본 동작은 지연 기호 로드라고도 하는 지연 기호 로드를 사용하는 것입니다. 이러한 종류의 로드는 기호가 필요할 때까지 로드되지 않음을 의미합니다.

예를 들어 .sympath 명령을 사용하여 기호 경로가 변경되면 내보내기 기호가 있는 로드된 모든 모듈이 지연적으로 다시 로드됩니다.

새 경로에 PDB 기호를 로드하는 데 사용된 원래 경로가 더 이상 포함되어 있지 않으면 전체 PDB 기호 가 있는 모듈의 기호가 지연 다시 로드됩니다. 새 경로에 PDB 기호 파일의 원래 경로가 계속 포함되어 있으면 해당 기호가 지연 다시 로드되지 않습니다.

-s 명령줄 옵션을 사용하여 CDB 및 KD에서 지연 기호 로드를 끌 수 있습니다. ld load 기호 명령을 사용하거나 .reload 모듈 명령을 옵션과 함께 사용하여 기호 로드를 /f 강제 적용할 수도 있습니다.

Azure DevOps Services 아티팩트

기호 서버는 Azure DevOps Services에서 Azure Artifacts와 함께 사용할 수 있습니다. WinDbg에서 Azure Artifacts를 사용하는 방법에 대한 자세한 내용은 WinDbg에서 기호를 사용하여 디버그를 참조하세요. Azure에서 생성된 기호에 대한 일반적인 내용은 기호 개요를 참조하세요.

기호 경로 제어

기호 경로를 제어하려면 다음 방법 중 하나를 선택할 수 있습니다.

  • .symfix set symbol store path 명령을 사용하여 많은 상황에서 잘 작동하는 공용 Microsoft 기호 서버에 대한 기본 경로를 설정합니다. 로컬 캐시를 설정하려면 .를 입력하기만 하면됩니다 .symfix C:\MyCache.

  • .sympath 명령을 사용하여 경로를 표시, 설정, 변경 또는 추가합니다.

  • 디버거를 시작하기 전에 환경 변수 및 _NT_ALT_SYMBOL_PATH 환경 변수를 사용하여 _NT_SYMBOL_PATH 경로를 설정합니다. 기호 경로는 다음을 _NT_ALT_SYMBOL_PATH추가하여 _NT_SYMBOL_PATH 만듭니다. 일반적으로 경로는 .를 통해 설정됩니다 _NT_SYMBOL_PATH. 그러나 프라이빗 버전의 공유 기호 파일이 있는 경우와 같은 특별한 경우 이러한 설정을 재정의하는 데 사용할 _NT_ALT_SYMBOL_PATH 수 있습니다. 이러한 환경 변수를 통해 잘못된 디렉터리를 추가하려고 하면 디버거는 이 디렉터리를 무시합니다.

  • 디버거를 시작할 때 -y 명령줄 옵션을 사용하여 경로를 설정합니다.

  • WinDbg에서만 파일 |을(를 ) 사용할 수 있습니다. 기호 파일 경로 명령 또는 키를 눌러 CTRL+S 경로에 표시, 설정, 변경 또는 추가합니다.

-sins 명령줄 옵션을 사용하는 경우 디버거는 기호 경로 환경 변수를 무시합니다.

문제 해결

기호가 로드될 때 !sym noisy 또는 -n WinDbg 명령줄 옵션을 사용하여 추가 세부 정보를 표시합니다. 추가 문제 해결 전략은 기호 확인을 참조 하세요.

참고 항목

Symbols

고급 SymSrv 사용

.sympath 명령

.symfix