다음을 통해 공유


Linux 덤프 디버깅

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

Linux에서 덤프를 수집하다

팁 (조언)

덤프 수집, 분석 및 기타 주의 사항에 대한 질문과 대답은 덤프: FAQ를 참조하세요.

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

Linux에서 덤프를 분석하다

덤프가 수집되면 dotnet-dump 도구를 사용하여 dotnet-dump analyze 명령으로 분석할 수 있습니다. 이 분석 단계는 덤프가 캡처된 환경과 동일한 아키텍처 및 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 올바른 기호 위치를 가리킬 수 있습니다(setsymbolserver -ms Microsoft의 기호 서버를 사용하거나 setsymbolserver -directory <path> 로컬 경로를 지정하려면). 네이티브 기호를 로드하려면 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 버전을 사용합니다.

참고하십시오