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

비밀번호

댓글 작성자
 




[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13945정성태6/7/2025387오류 유형: 960. 파이썬 + conda - mysqlclient 사용 시 "NameError: name '_mysql' is not defined" 에러
13944정성태6/7/2025400오류 유형: 959. The trust relationship between this workstation and the primary domain failed. - 네 번째 이야기
13943정성태6/6/2025540개발 환경 구성: 748. Windows + Foundry Local - 로컬에서 AI 모델 활용
13942정성태6/5/2025778오류 유형: 958. winget 설치 시 "0x80d02002 : unknown error"
13941정성태6/2/2025983닷넷: 2334. C# - cpuid 명령어를 이용한 CPU 제조사 문자열 가져오기파일 다운로드1
13940정성태6/1/20251376C/C++: 188. C++의 32비트 + Release 어셈블리 코드를 .NET으로 포팅할 때 주의할 점파일 다운로드1
13939정성태5/29/20251658오류 유형: 957. NVIDIA Triton Inference Server - version `GLIBCXX_3.4.32' not found (required by /opt/tritonserver/backends/python/triton_python_backend_stub)
13938정성태5/29/20251413개발 환경 구성: 747. 파이썬 - WSL/docker에 구성한 Triton 예제 개발 환경
13937정성태5/24/20251350개발 환경 구성: 746. Windows + WSL2 환경에서 (tensorflow 등의) NVIDIA GPU 인식
13936정성태5/23/20251177개발 환경 구성: 745. Linux / WSL 환경에 Miniconda 설치하기
13935정성태5/20/20251201파이썬 - pip 사용 시 "ImportError: cannot import name 'html5lib' from 'pip._vendor'" 오류
13934정성태5/20/20251706스크립트: 77. 파이썬 - 'urllib.request' 모듈의 명시적/암시적 로딩 차이
13933정성태5/19/20251284오류 유형: 956. Visual Studio 2022가 17.12 버전부터 업데이트 되지 않는다면?
13932정성태5/18/20251489스크립트: 76. 파이썬 - Version 문자열 다루기(semver 패키지)
13931정성태5/17/20251783스크립트: 75. 파이썬 - Cython 기본 예제 및 컴파일
13930정성태5/17/20251477개발 환경 구성: 744. 파이썬 - Windows embeddable package 환경에서 외부 패키지 사용하는 방법(ex: UFO² 환경 구성)
13929정성태5/16/20251494오류 유형: 955. 파이썬 - "Windows embeddable package" REPL 환경에서 "NameError: name 'exit' is not defined"
13928정성태5/15/20251541오류 유형: 954. UFO² - "'Invalid URL (POST /v1/chat/completions/chat/completions)'"
13927정성태5/15/20251531오류 유형: 953. OpenAI - The API request of HOST_AGENT failed: OpenAI API request exceeded rate limit: Error code: 429
13926정성태5/14/20251903개발 환경 구성: 743. LLM과 윈도우의 만남 - Desktop AgentOS UFO² 기본 환경 구성
13925정성태5/12/20252002닷넷: 2333. C# - (Console 유형의 프로젝트에서) Clipboard 연동파일 다운로드1
13924정성태5/8/20251740닷넷: 2332. C# - (JetBrains Omea Reader 대상으로) 런타임 시에 메서드 가로채기 [2]파일 다운로드1
13923정성태5/5/20251494스크립트: 74. 파이썬 - C# - Python.NET의 RunSimpleScript, Exec, Eval 차이점파일 다운로드1
13922정성태5/3/20251738스크립트: 73. 파이썬 - Windows embeddable package 버전에서 tkinter 환경 구성
13921정성태5/3/20252237오류 유형: 952. 듀얼 채널 메모리 정렬을 지키지 않은 컴퓨터의 Windows 비정상 종료 현상(Blue Screen) [2]
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...