이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 5902|회답: 1

[.NET 코어] [실제 전투]. NET/C# 애플리케이션이 충돌하고 예외가 자동으로 DMP 덤프 파일을 생성합니다

[링크 복사]
2022-11-6 22:41:42에 게시됨 | | | |
요구사항: .NET/C#을 사용해 애플리케이션을 개발할 때, 개발자의 코드 로직이나 사용자의 실행 환경과 관련이 있을 수 있으므로 어떤 개발자도 프로그램의 안정적이고 견고한 실행을 보장할 수 없습니다개발한 애플리케이션이 문제 없이 완벽하다는 100% 보장은 없습니다문제가 있다는 것이 나쁜 것은 아니지만, 원인을 찾지 못하고 문제를 해결하지 못하는 문제가 있다는 점이 더 나쁩니다.

애플리케이션이 예상대로 실행되지 않고 비정상적인 종료가 발생하면, DMP 덤프 파일을 자동으로 생성하여 문제를 해결할 수 있나요?
덤프는 프로세스가 생성되었을 때의 스냅샷을 포함하는 파일로, 애플리케이션 상태를 확인하는 데 사용할 수 있습니다. .NET 애플리케이션, 예를 들어 프로덕션이나 CI 환경에 디버거를 연결하는 것이 어려울 때는 덤프를 사용해 애플리케이션을 디버깅할 수 있습니다. 덤프를 사용하면 문제 프로세스의 상태를 포착할 수 있으며, 애플리케이션을 중단하지 않고도 상태를 직접 확인할 수 있습니다.

덤프 수집

환경 변수를 사용해 애플리케이션이 장애 시 덤프를 수집하도록 설정할 수 있습니다. 고장 원인을 알고 싶다면 도움이 됩니다. 예를 들어, 예외가 던져질 때 덤프를 캡처하면 앱 상태가 실패하면 문제를 식별할 수 있습니다.

다음 표는 실패 시 덤프를 수집하도록 애플리케이션을 구성할 수 있는 환경 변수들을 보여줍니다.

환경 변수
설명
기본값
COMPlus_DbgEnableMiniDump 아니면 DOTNET_DbgEnableMiniDump1로 설정하면 코어 덤프 생성을 활성화하세요.0
COMPlus_DbgMiniDumpType 아니면 DOTNET_DbgMiniDumpType수집해야 할 쓰레기장의 종류. 자세한 내용은 아래 표를 참조하세요2 (미니덤프위드프라이빗읽쓰기)
COMPlus_DbgMiniDumpName 아니면 DOTNET_DbgMiniDumpName파일 경로를 덤프에 쓰세요. dotnet 프로세스를 실행하는 사용자가 지정된 디렉터리에 쓰기 권한을 가졌는지 확인하세요./tmp/coredump.<pid>
COMPlus_CreateDumpDiagnostics 아니면 DOTNET_CreateDumpDiagnostics1로 설정하면 덤프 프로세스에 대한 진단 로깅을 활성화하세요.0
COMPlus_EnableCrashReport 아니면 DOTNET_EnableCrashReport(.NET 6 이상 필요) 1로 설정하면 런타임이 실패한 애플리케이션의 스레드와 스택 프레임에 관한 정보를 포함하는 JSON 형식의 실패 보고서를 생성합니다. 크래시 리포트 이름은 .crashreport.json에 붙은 덤프 경로/이름입니다.
COMPlus_CreateDumpVerboseDiagnostics 아니면 DOTNET_CreateDumpVerboseDiagnostics(.NET 7 이상 필요) 1로 설정하면 덤프 프로세스에 대한 상세한 진단 로깅을 활성화합니다.0
COMPlus_CreateDumpLogToFile 아니면 DOTNET_CreateDumpLogToFile(.NET 7 이상 버전 필요) 진단 메시지의 파일 경로는 작성되어야 합니다. 설정되지 않으면 실패한 애플리케이션의 콘솔에 진단 메시지가 작성됩니다.

이러한 환경 변수에 대해 .NET 7은 COMPlus_ 대신 DOTNET_ 접두사를 표준화합니다. 하지만 COMPlus_ 접두사는 계속 정상적으로 작동합니다. 만약 당신이.NET 런타임의 초기 버전에서는 환경 변수가 여전히 COMPlus_ 프리픽스를 사용해야 합니다



새로운 .NET Core 6 애플리케이션 테스트 생성

VS 2022를 사용해 다음 코드로 새로운 .NET Core 6 앱 테스트를 테스트하세요:

아래 이미지와 같이 cmd 명령어를 사용하여 프로그램을 시작합니다:

COMPlus_EnableCrashReport=1
COMPlus_DbgEnableMiniDump=1
COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp"
COMPlus_CreateDumpDiagnostics=1
처리되지 않은 예외. 시스템.예외: itsvse.com
   프로그램에서. <Main>$(String[] args) in C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:9행
[크리에이트덤프] 파일 C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp에 힙으로 미니덤프를 쓰기
[크리에이트덤프] 덤프 성공적으로 작성됨



프로그램이 비정상적으로 크래시된 후에는 지정한 디렉터리 내에서 성공적으로 실행되는 것을 확인할 수 있습니다덤프 .dmp 파일이 생성됩니다어떻게 분석할지는 또 다른 문제입니다.

윈도우 플랫폼 범용 설정

Windows에서는 Windows 오류 보고(WER)를 애플리케이션이 충돌할 때 덤프를 생성하도록 설정할 수 있습니다.

이 방법은 모든 프로그램에 적용되며, 단지 . C++, Go 등과 같은 .NET 프로그램; 그리고. 그물. NET 코어 버전

  • 열린 regedit.exe
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps 디렉터리를 열어
  • REG_EXPAND_SZ 타입의 KEY DumpFolder를 만들어 덤프 파일이 저장된 디렉터리를 설정하세요
  • 또한 총 덤프 수를 설정REG_DWORD KEY DumpCount 타입을 생성할 수도 있습니다




물론, PowerShell 명령어로도 구성할 수 있습니다:

위 설정에 따르면, 프로그램이 비정상적으로 종료되면 %LOCALAPPDATA%\CrashDumps 디렉터리에 프로그램 덤프가 생성됩니다.

리소스:

하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.




이전의:Discuz 첨부 이미지, 아바타 사진, 앨범 이미지 저장 규칙에 대한 상세 설명
다음:실용적인 동작: BundleTransformer를 사용해 System.Web.Optimization을 대체하기
 집주인| 2022-11-6 22:44:06에 게시됨 |
덤프 파일 전송:

프로그램이 시작된 후, 디렉터리에 생성된 덤프 파일이 있는지 확인하고, 있다면, 해당 인터페이스에 파일을 제출한 후 파일을 삭제합니다.
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com