[.net-4.0] WinDbg에서 SOS를로드 할 수 없습니다

배경 : WinDbg를 처음 사용하고 처음으로 실행하려고합니다. Windows Server 2008 (x86)의 IIS 7에서 호스팅되는 ASP.NET 4 사이트를 실행하여 로컬 컴퓨터로 다운로드 한 메모리 덤프를 검사하고 싶습니다.

디버깅 도구를 설치하고 WinDbg를 처음 시작하여 크래시 덤프를 엽니 다. 나는 파일에 갔다 | 기호 파일 경로를 클릭 하고 *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*모든 기호가로드 될 때까지 대기 한 경로를 설정하십시오 .

SOS를로드하려고 할 때 문제가 발생했습니다. 먼저 다음 명령을 시도했습니다 …

.loadby sos mscorwks

… 응답을 받았습니다 Unable to find module 'mscorwks'.

웹을 검색 한 후 다음 명령을 실행하여 mscorwk를로드하려고했습니다 …

sxe ld mscorwks.dll
g

… ”g ‘에 실행 가능한 디버거 오류가 없습니다’라는 응답을 받았습니다.

SOS.dll (C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319)을 WinDbg 디렉토리에 복사 한 다음 시도했습니다 …

.load sos

… 오류가 발생했습니다 …

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

진행 방법을 잘 모르겠습니다. SOS를로드 하고이 덤프 파일을 파고 싶습니다. 도움을 주시면 감사하겠습니다.

참고 … 64 비트 버전의 Windbg를 사용하여 64 비트 버전의 Windows 7에서 덤프 파일을 열려고합니다.



답변

CLR 런타임 dll의 이름 clr.dll이 .NET 4 로 바뀌 었습니다 . 따라서 올바른 버전의 SOS를로드하려면 .loadby명령 을 조정해야합니다 . 즉

.loadby sos clr

또한 64 비트 인 경우 32 비트 앱을 디버깅하려면 Windows 용 32 비트 버전의 디버깅 도구를 설치해야 합니다. 이들은 나란히 설치되므로 동일한 시스템에 32 비트 및 64 비트 버전이 모두있는 데 아무런 문제가 없습니다.

SOS.dll 복사에 대한 조언입니다. SOS는 정확한 버전의 프레임 워크와 일치해야합니다.를 사용하여 프레임 워크 디렉토리에서 프레임 워크를로드하면 .loadby모든 설정이 완료됩니다.


답변

WinDbg 명령 ‘g’는 [계속]을 의미합니다

덤프 파일을 여는 중이므로 ‘계속’할 방법이 없으므로 프로세스 메모리 만 포함됩니다.

따라서 프로세스가 실행 중이 아니기 때문에 ” ‘g’에 실행 가능한 디버거 오류 없음”메시지 가 논리적입니다 .

올바른 SOS 버전을로드 할 때는 .NET 버전에 따라 다음 명령을 사용하십시오.

.NET 4 이상 .loadby sos

.NET 3.5 및 2
.loadby sos mscorwks

.NET 1.0 및 1.1
.load clr10 \ sos


답변

시간이 지남에 따라 sos 로딩을 다루기가 더 쉬워 졌으므로 위의 답변은 개선이 필요합니다.

JOHN ROBBINS는 그 주위에 좋은 기사를 가지고 있습니다. Microsoft 기호 서버가 기호 파일 경로에 구성되어 있고 windbg 프롬프트에서! analyze -v를 실행하면 관련 sos 파일을 다운로드하는 트릭을 수행합니다. 프롬프트에서 .chain을 실행하면로드 된 dll이 표시됩니다.


답변

SOS를로드하는 비슷한 문제가 발생하여 “지정한 모듈을 찾을 수 없습니다”라는 메시지가 나타납니다. 다른 솔루션을 생각해 냈으므로 여기에 솔루션이 도움이되지 않으면 다음을 시도하십시오.

.loadby sos clr-지정된 모듈을 찾을 수 없습니다


답변