SymChk 사용

SymChk의 기본 구문은 다음과 같습니다.

symchk [/r] FileNames /s SymbolPath 

FileNames는 기호가 필요한 프로그램 파일을 하나 이상 지정합니다. FileNames가 디렉터리이고 /r 플래그가 사용되는 경우 이 디렉터리는 재귀적으로 탐색되며 SymChk는 이 디렉터리 트리의 모든 프로그램 파일에 대한 기호를 찾으려고 합니다. SymbolPath 는 기호를 검색할 SymChk 위치를 지정합니다.

더 많은 명령줄 옵션이 있습니다. 전체 목록은 SymChk Command-Line 옵션을 참조하세요.

symchk 가져오기

Symchk는 다른 디버깅 도구와 마찬가지로 디버거의 일부로 제공됩니다. 창에 대한 자세한 내용은 Windows용 디버깅 도구를 참조하십시오.

디버깅 도구가 설치되면 이 디렉터리에서 64비트 Windows용 symchk를 사용할 수 있습니다.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

Example Usage

지정된 기호 경로에는 원하는 수의 로컬 디렉터리, UNC 디렉터리 또는 기호 서버가 포함될 수 있습니다. 로컬 디렉터리와 UNC 디렉터리는 재귀적으로 검색되지 않습니다. 실행 파일의 확장을 기반으로 지정된 디렉터리와 하위 디렉터리만 검색됩니다. 예를 들어 쿼리

symchk thisdriver.sys /s G:\symbols 

는 G:\mysymbols 및 G:\mysymbols\sys를 검색합니다.

기호 경로의 일부로 다음 구문 중 하나를 사용하여 기호 서버를 지정할 수 있습니다.

srv*DownstreamStore*\\Server\Share
srv*\\Server\Share

이는 디버거의 기호 경로에서 기호 서버를 사용하는 것과 매우 유사합니다. 이에 대한 자세한 내용은 기호 서버 및 기호 저장소 사용을 참조하세요.

다운스트림 저장소가 지정된 경우 SymChk는 기호 서버에서 찾은 모든 유효한 기호 파일의 복사본을 만들어 다운스트림 저장소에 배치합니다. 전체 일치 항목인 기호 파일만 다운스트림으로 복사됩니다.

SymChk는 기호 서버를 쿼리하기 전에 항상 다운스트림 저장소를 검색합니다. 따라서 다른 사람이 기호 저장소를 유지 관리하는 경우 다운스트림 저장소를 사용하는 것에 주의해야 합니다. SymChk를 한 번 실행하고 기호 파일을 찾으면 이를 다운스트림 저장소에 복사합니다. 그런 다음 이러한 파일이 기호 저장소에서 변경되거나 삭제된 후 SymChk를 다시 실행하면 SymChk는 다운스트림 저장소에서 찾고 있는 항목을 찾고 더 이상 볼 수 없으므로 이 사실을 알아채지 못합니다.

참고 SymChk는 항상 SymSrv(Symsrv.dll)를 기호 서버 DLL로 사용합니다. 반면에 디버거는 SymSrv 이외의 기호 서버 DLL(사용 가능한 경우)을 선택할 수 있습니다. (SymSrv는 Windows용 디버깅 도구 패키지에 포함된 기호 서버입니다.)

SymChk를 사용하여 기호가 프라이빗인지 공용인지 확인

기호 파일이 프라이빗인지 공용인지 확인하려면 SymChk에서 자세한 출력을 표시하도록 /v 매개 변수를 사용합니다. MyApp.exe 및 MyApp.pdb가 c:\sym 폴더에 있다고 가정합니다. 이 명령을 입력합니다.

symchk /v C:\sym\MyApp.exe /s C:\sym**

MyApp.pdb에 프라이빗 기호가 포함된 경우 SymChk의 출력은 다음과 같습니다.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - private symbols & lines
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

MyApp.pdb에 공용 기호만 포함된 경우 SymChk의 출력은 다음과 같습니다.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - public symbols
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

공용 기호 파일만 찾도록 검색을 제한하려면 /s 매개 변수(/ss)와 함께 s 옵션을 사용합니다. 다음 명령은 MyApp.pdb에 공용 기호만 포함된 경우 일치 항목을 찾습니다. MyApp.pdb에 프라이빗 기호가 포함된 경우 일치하는 항목을 찾을 수 없습니다.

symchk /v C:\sym\MyApp.exe /s C:\sym

자세한 내용은 공용 및 프라이빗 기호를 참조하세요.

예제

다음은 몇 가지 예제입니다. 다음 명령은 프로그램 Myapp.exe 대한 기호를 검색합니다.

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\applications 

SYMCHK: Myapp.exe           FAILED  - Myapp.pdb is missing

SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 0

다른 기호 경로를 사용하여 다시 시도할 수 있습니다.

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

이번에는 검색에 성공했습니다. 자세한 정보 표시 옵션을 사용하지 않으면 SymChk는 기호를 찾지 못한 파일만 나열합니다. 따라서 이 예제에서는 파일이 나열되지 않았습니다. 이제 "전달된" 범주에 하나의 파일이 나열되고 "실패" 범주에는 파일이 없기 때문에 검색이 성공했음을 알 수 있습니다.

실행 코드가 없는 경우 프로그램 파일은 무시됩니다. 많은 리소스 파일이 이 형식입니다.

모든 프로그램 파일의 파일 이름을 보려면 /v 옵션을 사용하여 자세한 출력을 생성할 수 있습니다.

E:\debuggers> symchk /v F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: MyApp.exe           PASSED

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

다음 명령은 기호 서버에서 많은 수의 Windows 기호를 검색합니다. 다음과 같은 다양한 오류 메시지가 있습니다.

E:\debuggers> symchk /r C:\windows\system32 /s srv*\\manysymbols\windows 

SYMCHK: msisam11.dll         FAILED  - MSISAM11.pdb is missing
SYMCHK: msuni11.dll          FAILED  - msuni11link.pdb is missing
SYMCHK: msdxm.ocx            FAILED  - Image is split correctly, but msdxm.dbg i
s missing
SYMCHK: expsrv.dll           FAILED  - Checksum doesn't match with expsrv.DBG
SYMCHK: imeshare.dll         FAILED  - imeshare.opt.pdb is missing
SYMCHK: ir32_32.dll          FAILED  - Built with no debugging information
SYMCHK: author.dll           FAILED  - rpctest.pdb is missing
SYMCHK: msvcrt40.dll         FAILED  - Built with no debugging information
......
SYMCHK: FAILED files = 211
SYMCHK: PASSED + IGNORED files = 4809

참고 항목

SymChk Command-Line 옵션

기호 서버 및 기호 저장소 사용