Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 6개 있습니다.)
Windbg - ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4200.dll, Win32 error 0n2

procdump.exe를 이용해서 생성한 닷넷 응용 프로그램의 덤프를 고객사로부터 전달받아 windbg에 올려서 분석을 시작하려고 했습니다.

windbg를 실행하고, 덤프를 로드하니 아래와 같이 procdump.exe를 이용하여 덤프를 받은 상황을 보여줍니다.

Loading Dump File [D:\...[생략]...\TestApp_110119_154225.dmp]
User Mini Dump File with Full Memory: Only application data is available

Comment: '
*** procdump  -e -ma -t TestApp.exe
*** Unhandled exception'
Symbol search path is: SRV*\\localhost\e$\Symbols*http://msdl.microsoft.com/download/symbols;
Executable search path is:
Windows Server 2008/Windows Vista Version 6002 (Service Pack 2) MP (8 procs) Free x86 compatible
Product: Server, suite: TerminalServer SingleUserTS
Machine Name:
Debug session time: Wed Jan 19 15:42:25.000 2011 (UTC + 9:00)
System Uptime: 5 days 19:17:25.877
Process Uptime: 0 days 0:00:53.000

여느 때와 다름없이 sos.dll을 로드하고,

0:000> .loadby sos mscorwks

예외 발생을 파악하기 위해 "!pe (printexception의 간략 명령어)" 명령을 내렸으나 다음과 같이 실행이 안되었습니다.

0:000> !pe
CLRDLL: CLR DLL load disabled
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

혹시나 싶어 다른 명령도 수행해봤는데, 출력 결과만 좀 더 자세할 뿐 역시 오류가 발생합니다.

0:000> !clrstack
CLRDLL: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.4952 f:0
doesn't match desired version 2.0.50727.4200 f:0
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.4200.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.4200.dll' on the path
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4200.dll, Win32 error 0n2
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

일러주는 대로 ".cordll..." 명령을 내려도 마찬가지!

0:000> .cordll -ve -u -l
CLR DLL status: No load attempts

다시 한번 "!pe" 명령을 내려보았는데, 웬일인지 이번에는 좀 더 친절한 메시지를 출력해 주었습니다.

0:000> !pe
CLRDLL: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.42 f:0
doesn't match desired version 2.0.50727.4200 f:0
SYMSRV:  \\localhost\d$\Symbols\mscordacwks_x86_x86_2.0.50727.4200.dll\4A9EE474590000\mscordacwks_x86_x86_2.0.50727.4200.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.4200.dll/4A9EE474590000/mscordacwks_x86_x86_2.0.50727.4200.dll not found
SYMSRV:  The operation timed out
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.4200.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.4200.dll' on the path
SYMSRV:  \\localhost\d$\Symbols\mscorwks.dll\4A9EE474590000\mscorwks.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscorwks.dll/4A9EE474590000/mscorwks.dll not found
SYMSRV:  The operation timed out
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4200.dll, Win32 error 0n2
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

즉, 문제의 원인이란 것이 덤프를 생성했던 "Windows Server 2008 SP2" 시스템의 mscordacwks.dll을 마이크로소프트 측의 심벌 서버에서도 찾을 수 없었고, 제 시스템(Windows 7)의 mscordacwks.dll과도 다른 버전이라는 것입니다. (근데... 버전 차이가 묘하네요. "2.0.50727.42" / "2.0.50727.4200")

검색을 해보았더니 아래의 글에 해결책이 있습니다.

"Failed to load data access DLL, 0x80004005" ? OR ? What is mscordacwks.dll?
; http://blogs.msdn.com/b/dougste/archive/2009/02/18/failed-to-load-data-access-dll-0x80004005-or-what-is-mscordacwks-dll.aspx

정리해 보면, 그냥 간단하게 고객사 측에 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll" 파일을 요청한 후에, 아래의 메시지에서 보았던 경로에 정확하게 파일명까지 변경해서 넣어주면 됩니다.

SYMSRV:  \\localhost\d$\Symbols\mscordacwks_x86_x86_2.0.50727.4200.dll\4A9EE474590000\mscordacwks_x86_x86_2.0.50727.4200.dll not found




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 10/19/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2011-11-24 11시20분
windbg의 mscordacwks DLL 로드 문제
; http://www.sysnet.pe.kr/2/0/1181
정성태

... 136  137  [138]  139  140  141  142  143  144  145  146  147  148  149  150  ...
NoWriterDateCnt.TitleFile(s)
1605정성태1/23/201421191개발 환경 구성: 212. Visual Studio Online과 "Monaco" 서비스 연동
1604정성태1/23/201421507오류 유형: 216. 윈도우 서버 백업 - Hyper-V 가상 머신이 백업되지 않는 경우 (2)
1603정성태1/23/201433602개발 환경 구성: 211. Hyper-V - Generation 2 유형의 VM 생성 시 ISO 부팅이 안된다면? [1]
1602정성태1/22/201423806디버깅 기술: 62. windbg - 사용자 모드 원격 디버깅
1601정성태1/22/201427421오류 유형: 215. windbg - Symbol file could not be found. Defaulted to export symbols
1600정성태1/19/201424071.NET Framework: 410. C# - 재귀호출을 스택 자료구조와 반복문을 이용해 대체하는 방법을 Paralle.For와 함께? [1]파일 다운로드1
1599정성태1/18/201432190.NET Framework: 409. C# - 재귀호출을 스택 자료구조와 반복문을 이용해 대체하는 방법 [1]파일 다운로드1
1598정성태1/17/201425510디버깅 기술: 61. NT 서비스 시작 단계에서 닷넷 메서드에 BP를 걸어 디버깅하는 방법
1597정성태1/17/201424108Phone: 9. Xamarin Android에 구글 AdMob 사용하는 방법 [1]
1596정성태1/17/201423044오류 유형: 214. Local SYSTEM 계정으로 실행된 IE에서 다운로드가 안 되는 문제
1595정성태1/16/201420039오류 유형: 213. attrib - Not resetting system file
1594정성태1/15/201422187오류 유형: 212. 마이크로소프트 라이브 계정 로그인 실패하는 경우
1593정성태1/14/201420813오류 유형: 211. ASP.NET 응용 프로그램을 IIS Express에서 디버깅할 때 "Requested registry access is not allowed" 오류 발생
1592정성태1/14/201421108오류 유형: 210. 2대의 AD가 있는 경우 도메인에 컴퓨터 추가를 실패한다면? [1]
1591정성태1/14/201423277오류 유형: 209. DebugDiag: Unable to find mscordacwks_x86_x86_[...version...].dll
1590정성태1/14/201423938오류 유형: 208. VSS Writer - NTDS 오류
1589정성태1/14/201432882Windows: 85. 컴퓨터를 껐는데도 어느 순간 자동으로 켜진다면? [2]
1588정성태1/14/201429666Windows: 84. 윈도우 7/8 - 메뉴 항목이 잔상으로 남는 문제
1587정성태1/14/201425577디버깅 기술: 60. NT 서비스가 시작하자마자 디버거를 연결시키는 방법 (2)
1586정성태1/14/201427293디버깅 기술: 59. NT 서비스가 시작하자마자 디버거를 연결시키는 방법 (1) [1]
1585정성태1/14/201430191VS.NET IDE: 84. Visual Studio를 이용한 파일 비교(diff)
1584정성태1/13/201432493Windows: 83. 윈도우 8 - UI가 있는 프로그램을 Local SYSTEM 권한의 세션 0 데스크톱에서 실행하는 방법
1583정성태1/13/201430489Windows: 82. 윈도우 8 - "Interactive Services Detection" 서비스 시작하는 방법 [1]
1582정성태1/12/201428958개발 환경 구성: 210. 원격 데스크톱(RDP) 접속 프로그램 - Royal TS [1]
1581정성태1/12/201430304.NET Framework: 408. 자바와 닷넷의 제네릭 차이점 - 중간 언어 및 공변/반공변 처리 [8]
1580정성태1/12/201440328.NET Framework: 407. 닷넷 사용자 정의 예외 클래스의 최소 구현 코드 [1]
... 136  137  [138]  139  140  141  142  143  144  145  146  147  148  149  150  ...