Microsoft MVP성태의 닷넷 이야기
디버깅 기술: 50. windbg의 mscordacwks DLL 로드 문제 - 두 번째 이야기 [링크 복사], [링크+제목 복사],
조회: 19548
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 5개 있습니다.)

windbg의 mscordacwks DLL 로드 문제 - 두 번째 이야기


예전에 windbg에서 mscordacwks 로드 문제 때문에 sos 확장 DLL의 닷넷 디버깅이 안된다는 글을 쓴 적이 있었는데요.

Windbg - ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4200.dll, Win32 error 0n2
; https://www.sysnet.pe.kr/2/0/994

그때 당시의 해결 방안으로 심벌 폴더에 동일하게 경로를 맞춰주는 것으로 해결을 했었습니다.

최근에 고객사를 방문해서 "Windows Server 2003 Version 3790 (Service Pack 2)" 운영체제가 설치된 컴퓨터에서 windbg로 문제 해결을 해나가는데, 이와 유사한 문제가 발생했습니다. 다음과 같이 sos의 확장 DLL 명령어들이 정상적으로 실행이 안된 것입니다.

0:002> lm
start    end        module name
...[생략]...
79000000 7904a000   mscoree    (deferred)             
79060000 790bb000   mscorjit   (deferred)    
790c0000 7951a000   mscorlib   (deferred)                      
79e70000 7a400000   mscorwks   (deferred)     
...[생략]...

0:002> .loadby sos mscorwks

0:002> !clrstack

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.

그런데, 이번에는 DLL의 버전번호까지는 알 수 있었지만 PDB 파일의 시그니처가 출력되지는 않았습니다.

0:002> .cordll -ve -u -l
CLRDLL: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.6387 f:0
doesn't match desired version 2.0.50727.4005 f:0
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.4005.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.4005.dll' on the path
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4005.dll, Win32 error 0n2
CLR DLL status: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4005.dll, Win32 error 0n2

"Windbg - ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4200.dll, Win32 error 0n2" 글에 보면 고객사 컴퓨터에서 mscordacwks.dll을 복사해 와서 "d:\Symbols\mscordacwks_x86_x86_2.0.50727.4200.dll\4A9EE474590000\mscordacwks_x86_x86_2.0.50727.4200.dll" 경로에 복사하는 것으로 해결했다고 썼는데요. 아쉽게도 이번에는 2.0.50727.4005로 버전이 다르기 때문에 틀림없이 "4A9EE474590000"이라는 시그니처 값도 달라져야 하는데 그 문자열을 구할 수가 없었던 것입니다.

다른 방법이 있지 않을까 생각했는데, ".cordll"의 명령어를 가만 보니 "on the path"라는 말이 나옵니다. 아마도 "PATH" 환경 변수로 잡힌 경로에 mscordacwks_x86_x86_2.0.50727.4005.dll 파일로 놓아도 된다는 것이겠지요. 다행히 이 예상은 적중해서 로드가 잘 되었습니다. ^^

0:002> .cordll -ve -u -l
CLRDLL: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.6387 f:0
doesn't match desired version 2.0.50727.4005 f:0
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.4005.dll by mscorwks search
CLRDLL: Loaded DLL mscordacwks_x86_x86_2.0.50727.4005.dll
CLR DLL status: Loaded DLL mscordacwks_x86_x86_2.0.50727.4005.dll

그런데, 나중에 끝마치고 나서 살펴 보니 제가 다음의 글도 썼었더군요. ^^;

windbg의 mscordacwks DLL 로드 문제
; https://www.sysnet.pe.kr/2/0/1181

그 때는 "Debug Diag" 도구에서 덤프 파일을 올린 것이었는데 ... 거기에도 시그니처 경로가 나타난 것을 볼 수 있습니다. 아마 이번에도 그렇게 해서 나오지 않았을까 싶지만... 어쨌든 덕분에 새로운 방법을 알게 되었으니. ^^




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

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/10/2021]

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

비밀번호

댓글 작성자
 




... 16  17  18  19  [20]  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13152정성태11/1/20225938.NET Framework: 2061. ASP.NET Core - DI로 추가한 클래스의 초기화 방법 [1]
13151정성태10/31/20226131C/C++: 161. Windows 11 환경에서 raw socket 테스트하는 방법파일 다운로드1
13150정성태10/30/20226048C/C++: 160. Visual Studio 2022로 빌드한 C++ 프로그램을 위한 다른 PC에서 실행하는 방법
13149정성태10/27/20226036오류 유형: 825. C# - CLR ETW 이벤트 수신이 GCHeapStats_V1/V2에 대해 안 되는 문제파일 다운로드1
13148정성태10/26/20225957오류 유형: 824. msbuild 에러 - error NETSDK1005: Assets file '...\project.assets.json' doesn't have a target for 'net5.0'. Ensure that restore has run and that you have included 'net5.0' in the TargetFramew
13147정성태10/25/20225030오류 유형: 823. Visual Studio 2022 - Unable to attach to CoreCLR. The debugger's protocol is incompatible with the debuggee.
13146정성태10/24/20225879.NET Framework: 2060. C# - Java의 Xmx와 유사한 힙 메모리 최댓값 제어 옵션 HeapHardLimit
13145정성태10/21/20226202오류 유형: 822. db2 - Password validation for user db2inst1 failed with rc = -2146500508
13144정성태10/20/20226085.NET Framework: 2059. ClrMD를 이용해 윈도우 환경의 메모리 덤프로부터 닷넷 모듈을 추출하는 방법파일 다운로드1
13143정성태10/19/20226592오류 유형: 821. windbg/sos - Error code - 0x000021BE
13142정성태10/18/20225925도서: 시작하세요! C# 12 프로그래밍
13141정성태10/17/20227205.NET Framework: 2058. [in,out] 배열을 C#에서 C/C++로 넘기는 방법 - 세 번째 이야기파일 다운로드1
13140정성태10/11/20226553C/C++: 159. C/C++ - 리눅스 환경에서 u16string 문자열을 출력하는 방법 [2]
13139정성태10/9/20226224.NET Framework: 2057. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프로부터 모든 닷넷 모듈을 추출하는 방법파일 다운로드1
13138정성태10/8/20227628.NET Framework: 2056. C# - await 비동기 호출을 기대한 메서드가 동기로 호출되었을 때의 부작용 [1]
13137정성태10/8/20225914.NET Framework: 2055. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프로부터 닷넷 모듈을 추출하는 방법
13136정성태10/7/20226497.NET Framework: 2054. .NET Core/5+ SDK 설치 없이 dotnet-dump 사용하는 방법
13135정성태10/5/20226778.NET Framework: 2053. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프를 분석하는 방법 - 두 번째 이야기
13134정성태10/4/20225461오류 유형: 820. There is a problem with AMD Radeon RX 5600 XT device. For more information, search for 'graphics device driver error code 31'
13133정성태10/4/20225842Windows: 211. Windows - (commit이 아닌) reserved 메모리 사용량 확인 방법 [1]
13132정성태10/3/20225734스크립트: 42. 파이썬 - latexify-py 패키지 소개 - 함수를 mathjax 식으로 표현
13131정성태10/3/20228565.NET Framework: 2052. C# - Windows Forms의 데이터 바인딩 지원(DataBinding, DataSource) [2]파일 다운로드1
13130정성태9/28/20225429.NET Framework: 2051. .NET Core/5+ - 에러 로깅을 위한 Middleware가 동작하지 않는 경우파일 다운로드1
13129정성태9/27/20225710.NET Framework: 2050. .NET Core를 IIS에서 호스팅하는 경우 .NET Framework CLR이 함께 로드되는 환경
13128정성태9/23/20228402C/C++: 158. Visual C++ - IDL 구문 중 "unsigned long"을 인식하지 못하는 #import파일 다운로드1
13127정성태9/22/20226877Windows: 210. WSL에 systemd 도입
... 16  17  18  19  [20]  21  22  23  24  25  26  27  28  29  30  ...