다음을 통해 공유


Linux 덤프 디버그

이 문서의 적용 대상: ✔️ .NET Core 3.0 SDK 이상 버전

Linux에서 덤프 수집

덤프 컬렉션, 분석 및 기타 주의 사항에 대해 FAQ(질문과 대답)는 덤프: FAQ를 참조하세요.

Linux에서 덤프를 수집하는 두 가지 권장 방법은 다음과 같습니다.

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 이진 파일이 필요합니다.

  1. libmscordaccore.so
  2. libcoreclr.so
  3. 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 버전을 사용합니다.

참고 항목