Microsoft MVP성태의 닷넷 이야기
디버깅 기술: 50. windbg의 mscordacwks DLL 로드 문제 - 두 번째 이야기 [링크 복사], [링크+제목 복사],
조회: 26030
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




... 91  92  93  94  95  96  97  98  99  [100]  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11432정성태1/11/201826420.NET Framework: 726. WPF + Direct2D + SharpDX 출력 C# 예제파일 다운로드2
11431정성태1/11/201824388.NET Framework: 725. C# - 동기 방식이면서 비동기 메서드(awaitable)처럼 구현한 사례 [9]
11430정성태1/10/201827829.NET Framework: 724. WPF + Direct2D 출력 C# 예제 [2]파일 다운로드1
11429정성태1/9/201818536개발 환경 구성: 348. ASP.NET Core 2.1 Preview 버전 적용 방법
11428정성태1/6/201821313개발 환경 구성: 347. WinForm 프로젝트를 WPF 프로젝트 유형으로 변경하는 방법파일 다운로드1
11427정성태1/5/201819334오류 유형: 445. vcpkg 빌드 오류 - Starting the CLR failed with HRESULT 80040153
11426정성태1/5/201828999오류 유형: 444. curl로 호출할 때 발생하는 오류 정리
11425정성태1/4/201819656개발 환경 구성: 346. ASP.NET Core Web Application을 IIS에서 호스팅하는 방법 (2)
11424정성태1/4/201819217개발 환경 구성: 345. ASP.NET Core 프로젝트를 명령행에서 빌드하는 방법
11423정성태1/3/201837425VC++: 123. 내가 만든 코드보다 OpenCV의 속도가 월등히 빠른 이유 [8]파일 다운로드2
11422정성태1/2/201827969.NET Framework: 723. C# - OpenCvSharp 사용 시 C/C++을 이용한 속도 향상 (for 루프 연산) [4]파일 다운로드1
11421정성태1/2/201819782오류 유형: 443. Visual Studio - nuget configuration is invalid
11420정성태12/30/201723984.NET Framework: 722. C# - Windows 10 운영체제의 데스크톱 앱에서 음성인식(SpeechRecognizer) 사용하는 방법 [3]파일 다운로드1
11419정성태12/23/201726112.NET Framework: 721. WebClient 타입의 ...Async 메서드 호출은 왜 await + 동기 호출 시 hang 현상이 발생할까요? [2]파일 다운로드1
11418정성태12/23/201735883.NET Framework: 720. 비동기 메서드 내에서 await 시 ConfigureAwait 호출 의미 [2]파일 다운로드1
11417정성태12/22/201721734.NET Framework: 719. Task를 포함하는 async 메서드의 동작 방식 [2]
11416정성태12/21/201719370.NET Framework: 718. AsyncTaskMethodBuilder.Create() 메서드 동작 방식 [2]
11415정성태12/21/201721064.NET Framework: 717. Task를 포함하지 않는 async 메서드의 동작 방식 [6]
11414정성태12/21/201728235.NET Framework: 716. async 메서드의 void 반환 타입 사용에 대하여파일 다운로드2
11413정성태12/20/201722499개발 환경 구성: 344. 윈도우 10 - TTS 및 음성 인식을 위한 환경 설정
11412정성태12/20/201725194.NET Framework: 715. C# - Windows 10 운영체제의 데스크톱 앱에서 TTS(SpeechSynthesizer) 사용하는 방법 [1]파일 다운로드1
11411정성태12/20/201723425사물인터넷: 15. 라즈베리 파이용 C++ 프로젝트에 SSL Socket 적용
11410정성태12/20/201735711.NET Framework: 714. SSL Socket 예제 - C/C++ 서버, C# 클라이언트 [1]파일 다운로드1
11409정성태12/18/201741746VC++: 122. 오픈 소스 라이브러리를 쉽게 빌드해 주는 "C++ Package Manager for Windows: vcpkg" [7]
11408정성태12/18/201721362.NET Framework: 713. C# - SharpDX + DXGI를 이용한 윈도우 화면 캡처 소스 코드 + Direct2D 출력 + OpenCV (2)파일 다운로드1
11407정성태12/18/201724243.NET Framework: 712. C# - SharpDX + DXGI를 이용한 윈도우 화면 캡처 소스 코드 + Direct2D 출력 + OpenCV [1]파일 다운로드1
... 91  92  93  94  95  96  97  98  99  [100]  101  102  103  104  105  ...