Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 4개 있습니다.)

WinDbg Preview 버전부터 닷넷 코어 3.0 이후의 메모리 덤프에 대해 sos.dll 자동 로드

.NET 2.0까지 있었던 sos.dll 파일이 3.0 이후의 배포 디렉터리(예를 들어, C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.7)에서 사라졌습니다. 대신, 다음의 내용만을 포함하고 있는 SOS_README.md 파일이 있는데,

SOS and other diagnostic tools now ship of band and work with any version of the .NET Core runtime.

SOS has moved to the diagnostics repo here: https://github.com/dotnet/diagnostics.git.

Instructions to install SOS: https://github.com/dotnet/diagnostics#installing-sos.

내용을 쭉 읽다 보면 반가운 소식을 접하게 됩니다. ^^

Installing SOS on Windows
; https://github.com/dotnet/diagnostics/blob/master/documentation/installing-sos-windows-instructions.md

간단하게 정리하면, 이제부터는 10.0.18317.1001 이후 버전의 windbg인 경우 coreclr.dll에 따른 sos.dll을 자동으로 로드할 수 있게 되었다는 것입니다. 하지만 실제로 해보면, Windows SDK로부터 배포하는 windbg의 경우 10.0.19041.1 버전인데도 자동 로드를 하지 않았습니다. 반면, Windows 10의 Store App으로 배포되는 "WinDbg Preview"에서는 자동 로드가 되었습니다.

제가 가지고 있는 WinDbg Preview 버전이 10.0.20153.1000인데, 단순히 .NET Core 응용 프로그램의 덤프를 로드하기만 하면,

0:008> .chain
Extension DLL search Path:
    C:\Program Files\WindowsApps\...[생략]...
Extension DLL chain:
    sos: image 3.0.52901+0adfc0301b6e07c7124b277d4a8e7da6b8cb6784, API 2.0.0, built Wed Oct 30 01:50:33 2019
        [path: C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2001.2001.0_neutral__8wekyb3d8bbwe\amd64\winext\sos\sos.dll]
    dbghelp: image 10.0.19528.1000, API 10.0.6, 
        [path: C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2001.2001.0_neutral__8wekyb3d8bbwe\amd64\dbghelp.dll]
    ext: image 10.0.19528.1000, API 1.0.0, 
        [path: C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2001.2001.0_neutral__8wekyb3d8bbwe\amd64\winext\ext.dll]
    exts: image 10.0.19528.1000, API 1.0.0, 
        [path: C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2001.2001.0_neutral__8wekyb3d8bbwe\amd64\WINXP\exts.dll]
    uext: image 10.0.19528.1000, API 1.0.0, 
        [path: C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2001.2001.0_neutral__8wekyb3d8bbwe\amd64\winext\uext.dll]
    ntsdexts: image 10.0.19528.1000, API 1.0.0, 
        [path: C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2001.2001.0_neutral__8wekyb3d8bbwe\amd64\WINXP\ntsdexts.dll]

보는 바와 같이 sos 로드 관련해 어떤 명령도 수행한 적이 없는데도 저렇게 sos.dll이 올라온 것을 .chain으로 확인할 수 있습니다.




만약 Store App이 아닌 기존의 windbg에서도 로드하고 싶다면 그냥 자동으로 내려받았던 그 sos.dll을,

C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2001.2001.0_neutral__8wekyb3d8bbwe\amd64\winext\sos\sos.dll

그대로 복사해,

c:\temp> robocopy "C:\Program Files\WindowsApps\Microsoft.WinDbg_1.2007.6001.0_neutral__8wekyb3d8bbwe\amd64\winext\sos" "c:\temp" sos.dll

기존처럼 로드하면 됩니다.

0:009> .load c:\temp\sos.dll




그나저나, sos.dll과 함께 로드되어야 했던 mscordaccore.dll은 여전히 .NET Core의 배포 디렉터리에 존재합니다. 하지만, WinDbg는 sos.dll을 자동으로 가져온 것처럼, mscordaccore.dll도 현재 시스템에 없다면 자동으로 심벌 서버에서 내려받아 로드를 합니다.

0:000> .cordll -ve -u -l
CLRDLL: Unable to get version info for 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.3\mscordaccore.dll', Win32 error 0n87
CLRDLL: Loaded DLL e:\symbols\mscordaccore_AMD64_AMD64_4.700.20.11803.dll\5E4C618556b000\mscordaccore_AMD64_AMD64_4.700.20.11803.dll
Automatically loaded SOS Extension
CLR DLL status: Loaded DLL e:\symbols\mscordaccore_AMD64_AMD64_4.700.20.11803.dll\5E4C618556b000\mscordaccore_AMD64_AMD64_4.700.20.11803.dll

그러니까, 이제부터는 순수하게 메모리 덤프 파일만 가져오면 분석하는데 아무런 문제가 없게 된 것입니다.




참고로, WinDbg Preview가 설치되지 않은 경우라면 "dotnet tool install" 명령어를 이용해 sos.dll을 직접 다운로드하는 것도 가능합니다.

c:\temp> dotnet tool install -g dotnet-sos
You can invoke the tool using the following command: dotnet-sos
Tool 'dotnet-sos' (version '3.1.141901') was successfully installed.

c:\temp> dotnet-sos install
Installing SOS to C:\Users\testusr\.dotnet\sos from C:\Users\testusr\.dotnet\tools\.store\dotnet-sos\3.1.141901\dotnet-sos\3.1.141901\tools\netcoreapp2.1\any\win-x64
Creating installation directory...
Copying files...
Execute '.load C:\Users\testusr\.dotnet\sos\sos.dll' to load SOS in your Windows debugger.
SOS install succeeded

이렇게 내려받은 sos.dll을 기존의 Windbg에서 로드해 사용할 수 있습니다.

0:000> .load C:\Users\testusr\.dotnet\sos\sos.dll
0:000> .cordll -ve -u -l
CLRDLL: Unable to get version info for 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.3\mscordaccore.dll', Win32 error 0n87
CLRDLL: Loaded DLL e:\symbols\mscordaccore_AMD64_AMD64_4.700.20.11803.dll\5E4C618556b000\mscordaccore_AMD64_AMD64_4.700.20.11803.dll
Automatically loaded SOS Extension
CLR DLL status: Loaded DLL e:\symbols\mscordaccore_AMD64_AMD64_4.700.20.11803.dll\5E4C618556b000\mscordaccore_AMD64_AMD64_4.700.20.11803.dll




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

[연관 글]






[최초 등록일: ]
[최종 수정일: 5/18/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)
12881정성태12/17/20217270개발 환경 구성: 618. WSL Ubuntu 20.04에서 파이썬을 위한 uwsgi 설치 방법 (2)
12880정성태12/16/20217061VS.NET IDE: 170. Visual Studio에서 .NET Core/5+ 역어셈블 소스코드 확인하는 방법
12879정성태12/16/202113301오류 유형: 774. Windows Server 2022 + docker desktop 설치 시 WSL 2로 선택한 경우 "Failed to deploy distro docker-desktop to ..." 오류 발생
12878정성태12/15/20218357개발 환경 구성: 617. 윈도우 WSL 환경에서 같은 종류의 리눅스를 다중으로 설치하는 방법
12877정성태12/15/20217025스크립트: 36. 파이썬 - pymysql 기본 예제 코드
12876정성태12/14/20216843개발 환경 구성: 616. Custom Sources를 이용한 Azure Monitor Metric 만들기
12875정성태12/13/20216557스크립트: 35. python - time.sleep(...) 호출 시 hang이 걸리는 듯한 문제
12874정성태12/13/20216572오류 유형: 773. shell script 실행 시 "$'\r': command not found" 오류
12873정성태12/12/20217689오류 유형: 772. 리눅스 - PATH에 등록했는데도 "command not found"가 나온다면?
12872정성태12/12/20217474개발 환경 구성: 615. GoLang과 Python 빌드가 모두 가능한 docker 이미지 만들기
12871정성태12/12/20217597오류 유형: 771. docker: Error response from daemon: OCI runtime create failed
12870정성태12/9/20216170개발 환경 구성: 614. 파이썬 - PyPI 패키지 만들기 (4) package_data 옵션
12869정성태12/8/20218429개발 환경 구성: 613. git clone 실행 시 fingerprint 묻는 단계를 생략하는 방법
12868정성태12/7/20217006오류 유형: 770. twine 업로드 시 "HTTPError: 400 Bad Request ..." 오류 [1]
12867정성태12/7/20216686개발 환경 구성: 612. 파이썬 - PyPI 패키지 만들기 (3) entry_points 옵션
12866정성태12/7/202114056오류 유형: 769. "docker build ..." 시 "failed to solve with frontend dockerfile.v0: failed to read dockerfile ..." 오류
12865정성태12/6/20216753개발 환경 구성: 611. 파이썬 - PyPI 패키지 만들기 (2) long_description, cmdclass 옵션
12864정성태12/6/20215209Linux: 46. WSL 환경에서 find 명령을 사용해 파일을 찾는 방법
12863정성태12/4/20217138개발 환경 구성: 610. 파이썬 - PyPI 패키지 만들기
12862정성태12/3/20215878오류 유형: 768. Golang - 빌드 시 "cmd/go: unsupported GOOS/GOARCH pair linux /amd64" 오류
12861정성태12/3/20218107개발 환경 구성: 609. 파이썬 - "Windows embeddable package"로 개발 환경 구성하는 방법
12860정성태12/1/20216194오류 유형: 767. SQL Server - 127.0.0.1로 접속하는 경우 "Access is denied"가 발생한다면?
12859정성태12/1/202112388개발 환경 구성: 608. Hyper-V 가상 머신에 Console 모드로 로그인하는 방법
12858정성태11/30/20219647개발 환경 구성: 607. 로컬의 USB 장치를 원격 머신에 제공하는 방법 - usbip-win
12857정성태11/24/20217082개발 환경 구성: 606. WSL Ubuntu 20.04에서 파이썬을 위한 uwsgi 설치 방법
12856정성태11/23/20218895.NET Framework: 1121. C# - 동일한 IP:Port로 바인딩 가능한 서버 소켓 [2]
... 16  17  18  19  20  21  22  23  24  25  26  27  28  29  [30]  ...