|
NET / C # 응용 프로그램 개발, 개발자의 코드 로직과 관련이있을 수 있지만 사용자의 운영 환경과 관련이있을 수있는 프로그램이 안정적이고 강력하게 실행되도록하는 것은 모든 개발자가 불가능합니다. 즉, 문제없이 응용 프로그램을 개발했다고 100 % 보장 할 수 없으며 문제가 끔찍하지 않으며 문제가 있다는 두려움은 문제의 원인을 찾을 수없고 해결할 수 없다는 것입니다. 문제는 두려워 할 것이 없습니다.
개발 된 애플리케이션이 예상대로 실행되지 않아 비정상 종료되는 경우 문제 해결을 용이하게하기 위해 DMP 덤프 파일을 자동으로 생성하는 방법은 무엇입니까? 덤프는 애플리케이션이 생성된 시점의 프로세스 스냅샷이 포함된 파일로, 애플리케이션의 상태를 확인하는 데 사용할 수 있습니다. 프로덕션 환경이나 CI 환경과 같이 .NET 애플리케이션에 디버거를 연결하기 어려운 경우 덤프를 사용하여 애플리케이션을 디버깅할 수 있습니다. 덤프를 사용하면 문제가 있는 프로세스의 상태를 캡처하여 애플리케이션을 중지하지 않고도 상태를 직접 확인할 수 있습니다. 덤프 수집
환경 변수를 사용하여 장애 발생 시 덤프를 수집하도록 애플리케이션을 구성할 수 있습니다. 이는 장애의 원인을 파악하려는 경우에 유용할 수 있습니다. 예를 들어 예외가 발생할 때 덤프를 캡처하면 애플리케이션이 실패할 때 애플리케이션 상태를 확인하여 문제를 파악하는 데 도움이 될 수 있습니다.
다음 표는 장애 발생 시 덤프를 수집하도록 애플리케이션을 구성하는 데 사용할 수 있는 환경 변수를 보여줍니다.
환경 변수 | 설명 | 기본값 | COMPlus_DbgEnableMiniDump 또는 DOTNET_DbgEnableMiniDump | 1로 설정하면 코어 덤프 생성이 활성화됩니다. | 0 | COMPlus_DbgMiniDumpType 또는 DOTNET_DbgMiniDumpType | 수집할 덤프 유형입니다. 자세한 내용은 다음 표를 참조하세요. | 2(미니덤프위드프라이빗읽기쓰기메모리) | COMPlus_DbgMiniDumpName 또는 DOTNET_DbgMiniDumpName | 덤프를 작성할 파일 경로입니다. 닷넷 프로세스를 실행하는 사용자에게 지정된 디렉터리에 대한 쓰기 권한이 있는지 확인합니다. | /tmp/coredump. | COMPlus_CreateDumpDiagnostics 또는 DOTNET_CreateDumpDiagnostics. | 1로 설정하면 덤프 프로세스의 진단 로깅이 활성화됩니다. | 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 처리되지 않은 예외. system.Exception: itsvse.com 예외: Program.<Main>$(String[] args)의 C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:줄 9에 있는 itsvse.com [createdump] C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp 파일에 힙을 사용하여 미니덤프 쓰기 중 [createdump] 덤프가 성공적으로 작성되었습니다.
프로그램이 비정상적으로 충돌한 후 지정한 디렉토리에 덤프 .dmp 파일을 성공적으로 생성한 것을 볼 수 있지만, 이를 분석하는 방법은 다른 문제입니다.
Windows 플랫폼 일반 설정
Windows에서는 애플리케이션이 충돌할 때 덤프를 생성하도록 WER(Windows 오류 보고)을 구성할 수 있습니다.
이는 C++, Go 등과 같은 .NET 프로그램뿐만 아니라 모든 프로그램에서 작동하며 .NET 및 .NET Core 버전과 무관합니다!
- regedit.exe를 엽니다 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows 오류 보고\LocalDumps 디렉터리를 엽니다 덤프 폴더 유형 REG_EXPAND_SZ를 생성하여 다음을 구성합니다.
디렉터리를 구성하거나, REG_DWORD 타입의 KEY DumpCount를 생성하여 총 덤프 개수를 구성합니다.
물론 PowerShell 명령을 사용하여 구성할 수 있습니다:
위에서 구성한 대로 프로그램이 예외와 함께 종료되면 %LOCALAPPDATA%\CrashDumps 디렉터리에 프로그램 덤프가 생성됩니다.
참조:
h ttps:// learn.microsoft.com/zh-cn/dotnet/core/diagnostics/dumps h ttps:// www.cnblogs.com/InCerry/p/how_to_automic_create_dump_when_app_crash.html h ttps:// learn.microsoft.com/zh-cn/troubleshoot/developer/webapps/aspnetcore/practice-troubleshoot-linux/lab-1-3-capture-core-crash -dumps |
이전: Discuz 액세서리 이미지, 아바타 이미지, 앨범, 사진, 저장소 규칙 설명다음: BundleTransformer를 사용하여 System.Web 대체하기.
|