여러 스레드를 실행하는 응용 프로그램이 있습니다. MadExcept를 사용하여 오류를 잡아 내고 디버깅합니다.MadExcept에서 치명적인 응용 프로그램 오류가 발생하지 않았습니다.
문제는 가끔 2-3 시간이 지나면 Windows에서 프로그램 닫기 대화 상자가 표시된다는 것입니다. 왜 MadExcept가 그 오류를 처리하지 않습니까?
여러 스레드를 실행하는 응용 프로그램이 있습니다. MadExcept를 사용하여 오류를 잡아 내고 디버깅합니다.MadExcept에서 치명적인 응용 프로그램 오류가 발생하지 않았습니다.
문제는 가끔 2-3 시간이 지나면 Windows에서 프로그램 닫기 대화 상자가 표시된다는 것입니다. 왜 MadExcept가 그 오류를 처리하지 않습니까?
스레드는 특별한 경우입니다. 스레드에서 예외가 발생하면 전역 처리기에서 처리하지 않고 대개 응용 프로그램을 종료합니다. madExcept를 사용하면 쉽게 해결할 수 있습니다. 그냥 예외를 잡아서 MadExcept에게 말하십시오. 그것은 일반적인 방법으로 로그인하고 스레드를 죽이지 않을 것입니다.
uses
{$IFDEF MadExcept}
madExcept,
{$ENDIF}
procedure TMyThread.Execute;
begin
try
SetName;
// do your stuff
except
on errInfo : Exception do
begin
{$IFDEF MadExcept}
HandleException(etNormal, errInfo);
{$ENDIF}
end;
end;
end;
스레드가 시작될 때 스레드가 "RunningOK"속성을 true로 설정하고 예외를 false로 설정하면 예외가 발생합니다. 이 방법을 사용하면 내 제어 코드에서 문제가 발생했음을 알 수 있고 적절하게 처리 할 수 있습니다 (다시 시작하거나 오류를보고하는 등)
오류가 발생하여 Delphi의 예외 논리 외부에서 MadExcept가 catch 할 수없는 경우, MadExcept가 할 수있는 일은 아무것도 없습니다. 그러나 실제 오류에 대한 정보는 제공하지 않았습니다 ("프로그램 닫기 대화 상자"는 도움이되지 않습니다). ** if **라고 생각하는 대화가 닫 혔을지라도 (확실하지는 않습니다. Windows의 버전을 말하지 않았기 때문에) 오류보고 및 스택 추적을보고 볼 수있는 방법이 있습니다. 실제로 어떤 오류가 발생하고 어디에서 발생 했는가? 나는 여기에서 그것을 볼 수 없다, 그래서 나는 더 많은 도움이 될 수 없다. :) –
Windows 7을 사용 중입니다. 더 이상 제공되는 정보가 없습니다. "프로그램에 오류 및 창이 있습니다 ..." – opc0de
대화 상자에 오류 보고서를 볼 수있는 링크가 있습니다. 버그 리포트를 보낼 수 있도록 허용하면 MS에 보낼 텍스트 파일. 이 텍스트 파일에는 문제를 파악하는 데 도움이되는 호출 스택 및 기타 정보 (예외 코드, 레지스터 내용, 명령어 포인터 정보 등)가 있습니다. –