2013-08-29 2 views
0

저는 프로그램 실행 중에 발생할 수있는 모든 예외를 처리하기 위해 Delphi 7을 사용하고 있습니다. 내가 Application.OnException 사용 : = HandlerProcedure; 예외를 처리하지만 예외가 발생하면 HandlerProcedure가 호출되지 않습니다. 나는 아래로 Application.OnException을 할당 한 후 정말 작동하는지 보장하기 위해, 나는 예외를 제기 :Application.OnException이 모든 예외를 처리하지 못했습니다 - Delphi

Application.OnException := HandlerProcedure; 
raise Exception.Create('Exception'); 

을하고 HandlerProcedure 정의 :

procedure TFormMain.HandlerProcedure(Sender: TObject; E: Exception); 
begin 
    ShowMessage('Exception.');  
    Exit; 
end; 

그러나 HandlerProcedure가 호출되지 없구요. 모든 예외를 어떻게 처리 할 수 ​​있습니까?

+0

실제 코드에는 HandleImportScheduleException 및 HandlerProcedure라는 다른 이름이 없습니다. – bummi

+2

SSCCE를 제공하십시오. 대부분 'Application.Run' 전에 예외가 발생했을 가능성이 큽니다. –

+0

오. 그래도 내 실제 코드에는 존재하지 않습니다. 그냥 질문을 편집했습니다. –

답변

10

모든 예외를 차단하려는 경우 RTLUnwindProc 저수준 절차를 구현해야합니다.

이 코드는 저수준이므로 (예 : 스킬 기술이 필요함) 기존 코드를 더 잘 사용해야합니다. this stack overflow question을 참조하십시오. 나는 심지어 참조 코드 (델파이 7 이상에서 Win32에서 작업하는 저수준 asm 포함)를 my own answer에 넣었습니다.

+1

이 잘못된 조언. 나는 필요한 모든 것이 Askler가 버그를 수정하여 OnException이 호출되도록하는 것입니다. 기껏해야이 대답은 오해의 소지가 있습니다. –

+2

@DavidHeffernan OP는 "* 프로그램 실행 중에 발생할 수있는 모든 예외를 처리하려고 시도했습니다."... 내 대답이이 질문에 부합하는 것처럼 들리지만 그렇지 않습니까? –

+4

Asker는 당신이 추측하고있는 뉘앙스를 확실히 이해하지 못합니다 –

0

madExcept와 같은 타사 예외 처리기를 사용하는 경우 Application.OnException이 더 이상 발생하지 않습니다. 대신 TMadExceptionHandler.OnException 이벤트를 코딩하거나 RegisterExceptionHandler를 직접 호출해야합니다.

관련 문제