2017-10-09 2 views
2

실시간 컨트롤러 (Windows 7 Embedded)의 배경에서 실행되는 Windows C# 프로그램 (.net 3.5)이 있습니다.예기치 않은 프로그램 종료를 로그하는 방법

며칠 후 프로세스가 갑자기 종료됩니다. 이제 프로그램의 작업과 예외 사항을 철저히 기록하고 있습니다. 예외를 throw 할 수있는 모든 것은 try/catch로 둘러싸여 있으며 로그 파일에 기록되고 있으며 로거에 Windows 이벤트 로그에 기록되는 예외가있는 경우.

그러나 프로그램 종료를 유발할 수있는 예외를 암시하는 것은 아무것도 로그에 없습니다.

프로그램 종료를 포착하고 기록하는 다른 기술이 있습니까?

지금까지 온라인 디버그 세션에서 버그를 재현하지 못했습니다.

프로그램 자체는 매우 간단합니다. 두 개의 스톱워치를 사용하고 스레드를 생성하여 실시간 프로그램과 통신합니다. 'alive'부울, 'error'정수를 쓰고 다른 정수를 읽습니다. 로그 파일 크기는 10MB로 제한됩니다. 크기에 도달하면 파일의 이름이 날짜로 바뀌고 새 파일이 열립니다. 30 일보다 오래된 파일은 삭제됩니다.

Windows 이벤트 로그를 검사했지만 직접 프로그램과 관련된 내용을 찾을 수 없습니다.

무엇을 하시겠습니까?

+2

봐는, mayby ​​뭔가를 잡을 수 있습니다. @BWA 동의 – BWA

+0

, 즉 너무 내 제안 할 것이다.의 – rmjoia

+0

가능한 중복을 [ NET 응용 프로그램에서 모든 예외/충돌을 잡는 방법] (https://stackoverflow.com/questions/82483/how-to-catch-all-exceptions-crashes-in-a-net-app) – Sinatr

답변

0

가장 좋은 방법은 전역 예외를 고려하는 것입니다. 당신이 참조 할 수있는 글로벌 예외 처리에 대한 자세한 내용은 또한

AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) => 
{ 
    Debug.WriteLine(eventArgs.Exception.ToString()); 
}; 

: 당신은 다음 코드 조각을 추가로 간단히 할 수있는 응용 프로그램에서 발생하는 모든 예외를 잡을 것 첫 번째 예외를 잡기 수 있습니다 this 정말 도움이되는 기사입니다.

+0

좋은 힌트입니다. 감사합니다. . – Simorgh

0

내 대답은 내 자신의 질문입니다.

불행히도 나는 관련성이없는 것으로 판단되는 세부 사항을 남겨 두었습니다. 응용 프로그램은 사용자가 로그인하기 전에 시스템 부팅시 Windows 작업 스케줄러에 의해 시작됩니다. 작업 등록 정보에는 3 일 이상 걸리면 작업을 종료하는 확인란이 있습니다. 나는 :(선택을 취소하는 것을 잊었다.

당신의 기여에 감사드립니다. 글로벌 예외 핸들러에서

관련 문제