다음을 통해 공유


KD를 사용하여 User-Mode 오류 디버깅

사용자 모드 오류를 제대로 디버그하려면 CDB 또는 WinDbg가 필요합니다. 그러나 사용자 모드 디버거가 없으므로 사용자 모드 예외가 KD로 중단되는 경우가 있습니다. 커널 모드 문제를 디버깅하는 동안 특정 사용자 모드 프로세스가 수행하는 작업을 모니터링하는 것이 유용한 경우도 있습니다.

기본적으로 커널 디버거는 지정된 주소( k, u 또는 ln 명령의 경우)와 일치하는 첫 번째 사용자 모드 기호를 로드하려고 시도합니다.

아쉽게도 사용자 모드 기호는 기호 경로에 지정되지 않거나 첫 번째 기호가 올바른 기호가 아닌 경우가 많습니다. 기호가 없는 경우 기호 경로에 복사하거나 .sympath(기호 경로 설정) 명령을 사용하여 전체 기호 트리를 가리킨 다음 .reload(모듈 다시 로드) 명령을 사용합니다. 잘못된 기호가 로드되면 .reload binary.ext>를 수행하여 기호를 명시적으로 로드<할 수 있습니다.

대부분의 Windows DLL은 다른 주소에서 로드되도록 다시 지정되지만 예외가 있습니다. 비디오 어댑터는 가장 일반적인 예외입니다. 모두 동일한 기본 주소에 로드되는 수십 개의 비디오 어댑터가 있으므로 KD는 거의 항상 ati.dll(첫 번째 비디오 기호, 사전순)을 찾습니다. 비디오의 경우 lm 명령을 사용하여 식별할 수 있는 .sys 파일도 로드됩니다. 이 정보를 사용하여 .reload 를 실행하여 올바른 비디오 DLL을 가져올 수 있습니다. 디버거가 혼동되고 특정 기호를 다시 로드하면 올바른 스택을 제공하는 데 도움이 되는 경우도 있습니다. 함수를 언어셈블하여 기호가 올바른지 확인합니다.

비디오 DLL과 마찬가지로 거의 모든 실행 파일이 동일한 주소로 로드되므로 KD는 액세스를 보고합니다. 액세스에 스택 추적이 표시되는 경우 !process 를 수행하고 지정된 실행 파일 이름의 .reload 를 수행합니다. 실행 파일에 기호 경로에 기호가 없는 경우 기호를 복사하고 .reload 를 다시 수행합니다.

경우에 따라 전체 기호 트리가 기호 경로에 있는 경우에도 KD 또는 WinDbg에서 올바른 사용자 모드 기호를 로드하는 데 문제가 있습니다. 이 경우 ntdll.dll 및 kernel32.dll 필요한 가장 일반적인 기호 중 두 가지입니다. KD에서 CSRSS를 디버깅하는 경우 winsrv.dll 및 csrsrv.dll 로드하는 일반적인 DLL이기도 합니다.