2015-01-29 1 views
0

64 비트 컴퓨터에서 호스팅되는 32 비트 응용 프로그램 (.NET 3.5를 대상으로 함)이 있습니다. 이 32 비트 응용 프로그램의 메모리 덤프를 분석하고 싶습니다. 32 비트 adplus 및 cdb를 사용하여 메모리 덤프를 캡처했습니다. 32 비트 windbg에 메모리 덤프를로드 중입니다. NET 2.0 sos.dll 및 .net 2.0 mscorwks.dll을 windbg에로드하고! clrstack을 실행하면 다음 오류가 발생합니다. "런타임 DLL (mscorwks.dll)을 찾지 못했습니다. 0x80004005 확장 명령에 mscorwks.dll이 필요합니다. 할 일이 있기를 바란다. " 내가 도대체 ​​뭘 잘못하고있는 겁니까?로드 할 sos 및 clr/mscorwks.dll의 버전은 무엇입니까?

adplus -hang -quiet -p 2440 -o C:\temp 

WinDbg를 명령 :

ADPlus를 명령 줄 코멘트에 요청한

정보는

0:000> .load <fullpathto>\sos.dll 

0:000> lmvm mscorwks 
start end  module name 

0:000> .exr -1 
ExceptionAddress: 00000000 
    ExceptionCode: 80000007 (Wake debugger) 
    ExceptionFlags: 00000000 
NumberParameters: 0 
+1

즉, mscorwks.dll을 * 대상 * (덤프)에서 찾을 수 없습니다. 디버거에 mscorwks.dll을로드하지 마십시오. "lmvm mscorwks"의 출력은 무엇입니까? .NET 3.5 (아직 2.0 런타임을 사용함)가 아직 대상 프로세스에서 초기화되지 않은 상황에 처해 있습니다. –

+1

또 다른 질문을해야합니다. "lmvm clr"의 출력은 무엇입니까? –

+0

WinDbg에 mscorwks.dll을로드 할 필요가 없습니다. 그것은 아무것도하지 않습니다. 디버거가 아닌 프로세스에로드해야합니다 (그렇지 않을 수도 있음). SOS를로드하는 데 사용한 명령은 무엇입니까? AdPlus를 시작하기 위해 사용하신 명령은 무엇입니까? 초기 중단 점의 희생자 일 수 있습니다. '.exr -1'의 출력 결과는 무엇입니까? 이 정보를 질문에 추가하십시오. –

답변

1

덤프에는 .NET이로드되지 않았 음을 나타냅니다. 그렇지 않으면 lmvm mscorwks의 출력은 다음과 같이 .NET 런타임의 세부 사항을 표시해야합니다 : 당신은 전체 경로로 SOS를로드 언급

0:003> lmvm mscorwks 
start end  module name 
61bc0000 6216e000 mscorwks (deferred)    
    Image path: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 
    ... 
    File version:  2.0.50727.5485 
    ... 

. 덤프가 컴퓨터에 촬영 한 경우, 당신은 일반적으로 귀하의 경우에는

0:003> .loadby sos mscorwks  

를 사용하여로드 것, 이것은 이미 .NET로드되지 않았 음을 당신에게 힌트를 제공해야합니다 :

Unable to find module 'mscorwks' 

당신이 만약 ' 닷넷 버전에 대한 확신하지 재,

.loadby sos clr; *** .NET 4 
.loadby sos coreclr; *** Silverlight/Universal Apps 

어쩌면 당신은 당신의 ADPlus를 명령 줄에 오타가 있었다 잘못된 프로세스 ID를 지정하려고합니다. 해당 PID가 실수로 존재하면 잘못된 덤프가 발생합니다. BTW 프로세스 이름

0:003> | 
. 0 id: 1e78 attach name: E:\...\NET2x32.exe 

을 확인 |를 사용 ADPlus에서의 -quiet 매개 변수는 사용되지 않습니다, 당신은 그것을 생략 할 수 있습니다.

+0

mscorwks.dll과 clr.dll의 차이점은 무엇입니까? –

+0

@EhsanSajjad :'mscorwks.dll'은 .NET CLR 2 (.NET 2.0, 3.0 및 3.5)이고'clr.dll'은입니다.NET CLR 4 (.NET 4.0, 4.5) –