Linux 덤프 디버그
이 문서의 적용 대상: ✔️ .NET Core 3.0 SDK 이상 버전
Linux에서 덤프 수집
팁
덤프 컬렉션, 분석 및 기타 주의 사항에 대해 FAQ(질문과 대답)는 덤프: FAQ를 참조하세요.
Linux에서 덤프를 수집하는 두 가지 권장 방법은 다음과 같습니다.
dotnet-dump
CLI 도구- 크래시 덤프를 수집하는 환경 변수
Linux에서 덤프 분석
덤프가 수집된 후에는 dotnet-dump analyze
명령과 함께 dotnet-dump
도구를 사용하여 분석할 수 있습니다. 이 분석 단계는 덤프가 캡처된 환경과 동일한 아키텍처 및 Linux 배포판이 있는 컴퓨터에서 실행되어야 합니다.
dotnet-dump
도구는 .NET 코드에 대한 정보 표시를 지원하지만 C 및 C++와 같은 다른 언어의 코드 문제를 이해하는 데는 유용하지 않습니다.
또는 LLDB를 사용하여 Linux에서 덤프를 분석할 수 있으며 이를 통해 관리 코드와 네이티브 코드를 모두 분석할 수 있습니다. LLDB는 SOS 확장을 사용하여 관리 코드를 디버그합니다. dotnet-sos
CLI 도구를 사용하여 관리 코드를 디버그하기 위한 여러 유용한 명령이 포함된 SOS를 설치할 수 있습니다. .NET Core 덤프를 분석하려면 LLDB 및 SOS에는 덤프가 생성된 환경의 다음 .NET Core 이진 파일이 필요합니다.
- libmscordaccore.so
- libcoreclr.so
- dotnet(앱을 시작하는 데 사용되는 호스트)
대부분의 경우 dotnet-symbol
도구를 사용하여 해당 이진 파일을 다운로드할 수 있습니다. dotnet-symbol
을 사용하여 필요한 이진 파일을 다운로드할 수 없는 경우(예를 들어 소스에서 빌드된 프라이빗 버전의 .NET Core를 사용 중인 경우) 덤프가 생성된 환경에서 위에 나열된 파일을 복사해야 할 수 있습니다. 파일이 덤프 파일 옆에 있지 않으면 LLDB/SOS 명령 setclrpath <path>
를 사용하여 파일을 로드해야 하는 소스 경로를 설정하고 setsymbolserver -directory <path>
를 사용하여 기호 파일을 확인할 경로를 설정할 수 있습니다.
필요한 파일을 사용할 수 있게 되면 디버그할 실행 파일로 dotnet 호스트를 지정하여 LLDB에서 덤프를 로드할 수 있습니다.
lldb --core <dump-file> <host-program>
이전 명령에서 <dump-file>
은 분석할 덤프의 경로이고 <host-program>
은 .NET Core 애플리케이션을 시작한 네이티브 프로그램입니다. 앱이 자체 포함된 경우가 아니면 해당 프로그램은 일반적으로 dotnet
이진 파일이며, 이 경우 .dll 확장명이 없는 애플리케이션의 이름입니다.
LLDB가 시작되면 setsymbolserver
명령을 사용하여 올바른 기호 위치를 가리켜야 할 수 있습니다(Microsoft의 기호 서버 또는 setsymbolserver -directory <path>
를 사용하여 로컬 경로를 지정하려면 setsymbolserver -ms
). 네이티브 기호를 로드하려면 loadsymbols
를 실행합니다. 이 시점에서 SOS 명령을 사용하여 덤프를 분석할 수 있습니다.
참고 항목
LLDB는 sudo apt-get install lldb
명령으로 설치할 수 있습니다.
Windows에서 덤프 분석
Linux 컴퓨터에서 수집된 덤프는 Visual Studio, Windbg 또는 dotnet-dump 도구를 사용하여 Windows 컴퓨터에서 분석할 수도 있습니다. Visual Studio와 Windbg는 모두 네이티브 코드와 관리 코드를 분석할 수 있는 반면, dotnet-dump는 관리 코드만 분석합니다.
참고 항목
Visual Studio 버전 16.8 이상을 사용하면 .NET Core 3.1.7 이상에서 생성된 Linux 덤프를 열고 분석할 수 있습니다.
- Visual Studio - Visual Studio 덤프 디버깅 가이드를 참조하세요.
- Windbg - Windows 사용자 모드 덤프를 디버그하는 데 사용하는 동일한 지침을 사용하여 windbg에서 Linux 덤프를 디버그할 수 있습니다. Linux x64 또는 Arm64 환경에서 수집된 덤프에는 x64 버전의 windbg를 사용하고 Linux x86 환경에서 수집된 덤프에는 x86 버전을 사용합니다.
- dotnet-dump - dotnet-dump analyze 명령을 사용하여 덤프를 봅니다. Linux x64 또는 Arm64 환경에서 수집된 덤프에는 x64 버전의 dotnet-dump를 사용하고 Linux x86 환경에서 수집된 덤프에는 x86 버전을 사용합니다.
참고 항목
- SOS 확장 설치에 대한 자세한 내용은 dotnet-sos를 참조하세요.
- 기호 다운로드 도구 설치 및 사용에 대한 자세한 내용은 dotnet-symbol을 참조하세요.
- 유용한 FAQ를 포함하여 디버깅에 대한 자세한 내용은 .NET Core 진단 리포지토리를 참조하세요.
- Linux 또는 Mac에 LLDB를 설치하는 방법에 관한 지침은 LLDB 설치를 참조하세요.
- Linux에서 크래시 덤프 디버깅에 대한 자습서는 Linux에서의 실습 및 문제 해결입니다.
.NET