오류가 표시되지 않고 프로그램이 충돌 할 때 문제를 식별하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/798239

  •  18-09-2019
  •  | 
  •  

문제

응용 프로그램이 충돌하고 "보내지 말아라"및 "오류 보고서 보내기"버튼이 포함 된 대화 상자가 표시 될 때 어떤 단계를 따라야하는지 알려주십시오.

이벤트 시청자를 보는 것 외에는 무엇을 할 수 있습니까?

감사

도움이 되었습니까?

해결책

  1. 당신은 추가 할 수 있습니다 try/catch/finally 당신 주위에 구성 Main() 진입 방법의 몸.

  2. Winforms의 경우 a를 추가 할 수 있습니다 ThreadException Application.run () 직전에 핸들러는 Winforms UI 이벤트 처리기에 예외를 포착합니다.

    Application.ThreadException +=
       new ThreadExceptionEventHandler(Application_ThreadException);
    
  3. 다른 모든 처리되지 않은 예외는 다음을 사용하여 잡을 수 있습니다.

    AppDomain.CurrentDomain.UnhandledException +=
       new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    

    그러나 이것은 예외를 기록/보고 할 수 있다는 것을 언급 할 가치가 있습니다.이 최종 핸들러를 종료하면 응용 프로그램이 닫히는 것을 방지 할 수 없습니다.

  4. Visual Studio도 구성 할 수도 있습니다 첫 번째 기회 예외를 끊습니다, 및 외부 디버거 (예 : 관리되는 SOS 확장 기능이있는 WINDBG와 같은)는 1 차 예외를 포착 할 수 있습니다 (http://www.codeproject.com/kb/debug/windbg_part1.aspx).

또한 Log4Net과 같은 로깅 프레임 워크를 사용하여 응용 프로그램이 닫히기 전에 앱에 유용한 로깅을 추가하고 예외 정보를 덤프하십시오.

다른 팁

사용자에게 오류를 재현 할 수 있는지 물어보십시오. 오류를 재현 할 수있는 경우 Visual Studio에서 디버그에서 실행하고 단계를 따라 충돌을 일으키십시오. Visual Studio는 오류가 발생하는 디버그 모드로 들어갑니다. 거기에서 스택 추적을 따라 오류를 일으키는 코드를 확인할 수 있습니다. Visual Studio는 대부분의 시간을 매우 쉽게 디버깅 할 수 있습니다.

이상적으로는 로깅 라이브러리를 사용해야합니다 nlog 또는 log4net 처리되지 않은 예외와 일반적으로 예외를 기록하려면 코드가 발생할 때 코드에 로그인하여 예외를 기록합니다.

또한 개발 시스템에서 실행되지 않을 때 문제를 추적하는 데 도움이되는 응용 프로그램에 다양한 수준의 로그를 작성하는 데 도움이 될 수 있습니다. NLOG를 사용하면 생산 코드에 로깅을 남겨두고 로깅 구성 파일을 사용하여 로그 출력을 활성화 / 비활성화 할 수 있습니다.

log4net을 사용하지 않았으므로 비슷한 기능이 있는지 모르겠습니다.

"Send/Do not"오류는 배경 스레드에서 처리되지 않은 예외가있을 때 오류가 발생하는 경향이 있습니다 (기본 스레드는 스택 추적으로 .NET 대화 상자를 계속 표시합니다).

스레드 기능에 예외 처리기를 추가하고 여기에서 로그인하십시오.

void RunMyThread()
{
    try
    {
        // background thread code
    }
    catch (Exception ex)
    {
        // Log the exception
    }
}

이것은 단순화되어 있으며 예외를 처리하는 방법이 아닐 수도 있습니다. 그러나 이것은 당신이 올바른 방향으로 움직일 수 있기를 바랍니다.

WindBG를 사용하여 문제를 디버깅하십시오. 예외가 발생하면 (중단 점에서 정지에서와 같이) 파손 된 다음 스택 트레이스를 검사 할 수 있습니다 ... 범위 등의 물체 ...

고객 사이트에서 발생하고 개발자 디버거 내부에서 쉽게 재현 할 수없는 경우 Post Mortem 디버깅을 수행 할 수 있습니다. 나는 사용하는 것을 좋아한다 userdump 메모리 덤프 파일 (.dmp)을 수집합니다. 그런 다음 분석을 위해 WindBG를 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top