2008-09-25 7 views
4

우리의 응용 프로그램 중 하나에서 나는 발견하거나 함정 수없는 예외를 받고.기본 애플리케이션 유닛이 종료 된 후에 예외를 잡을 수 있습니까?

... 
    Application.CreateForm(TFrmMain, FrmMain); 
    outputdebugstring(pansichar('Application Run')); //this is printed 
    Application.Run; 
    outputdebugstring(pansichar('Application Run After')); //this is printed 
end. 
<--- The Exception seems to be here  

이벤트 로그

> ODS: Application Run 
> //Various Application Messages 
> ODS: Application Run After 
> First Change Exception at $xxxxxxxx. ...etc 

내가 그것을 단위 중 하나의 마무리 코드입니다 생각할 수있는 모든을 보여줍니다.

(델파이 7) MadExcept를 설치

답변

4

시도 -이 예외를 catch하고 당신에게 스택 추적을 제공해야합니다.

비슷한 문제가있을 때 도움이되었습니다. 빠르고 쉬운

1) 마지막에 'F7'을 칠하는 것입니다

4

여기 당신이 시도 할 수있는 두 가지의 '끝.'. 그러면 다른 마무리 작업 블록이 시작됩니다.

2) Application.OnException 이벤트를 재정의하십시오.

4

SysUtils 유닛은 실제로 초기화 섹션에 기본 ErrorProc 및 ExceptProc 프로 시저를 설정하고 종료 섹션에서이를 취소합니다. 따라서이 상황에서 SysUtils가 사용자의 uses 절의 첫 번째 유닛임을 보장해야합니다. dpr, 그러면 마지막으로 최종화 될 것입니다. 무엇이 잘못되었는지에 대한 의미있는 데이터를 얻기에 충분할 수 있습니다.

2

마무리 예외는 까다 롭습니다. SysUtls을 프로젝트 파일에 넣어도 응용 프로그램 개체가 이미 없어 졌을 수 있습니다. 따라서 전역 예외 처리기도 사라졌습니다. MadExcept이 작동 할 수 있습니다.

또 다른 해결책은 이 장치 마무리 섹션의 각 블록을 제외하고/시도 넣어, 다음, 거기에 예외를 처리하는 것입니다.

귀하의 목표는 무엇입니까? 예외를 억제하거나 디버그 하시겠습니까? 디버깅은 Zartog가 제안한대로 F7을 사용하여 수행 할 수 있습니다. finalization에서 예외가있는 유닛을 발견하면 호출 된 uses 절에 다른 순서로 배치 할 수 있습니다.

행운을 빈다.