Можете ли вы поймать исключение после того, как основной блок приложения закончился? - PullRequest
4 голосов
/ 25 сентября 2008

В одном из наших приложений я получаю исключение, которое я не могу найти или перехватить.

...
  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

Все, что я могу думать, это код завершения одного из модулей.

(Delphi 7)

Ответы [ 4 ]

4 голосов
/ 25 сентября 2008

Вот две вещи, которые вы можете попробовать:

1) Быстро и легко нажать «F7» в конце. Это переместит вас в другие блоки завершения.

2) Попробуйте переопределить событие Application.OnException.

4 голосов
/ 25 сентября 2008

Модуль SysUtils фактически устанавливает процедуры по умолчанию ErrorProc и ExceptProc в своем разделе инициализации и отменяет их в своем разделе финализации, поэтому часто в этой ситуации стоит убедиться, что SysUtils является самым первым модулем в предложении использования в вашем dpr. , так что тогда это будет последний завершен. Может быть достаточно, чтобы получить некоторые значимые данные о том, что идет не так.

4 голосов
/ 25 сентября 2008

Попробуйте установить MadExcept - он должен перехватить исключение и дать вам трассировку стека.

Мне помогло, когда у меня возникла похожая проблема.

2 голосов
/ 25 сентября 2008

Финализация исключений сложна. Даже если вы сначала поместите SysUtls в файл проекта, ваш объект приложения уже может быть удален, что означает, что ваш глобальный обработчик исключений также отсутствует. MadExcept может работать для этого, хотя.

Другое решение состоит в том, чтобы поместить Try / Кроме блока в каждую из ваших секций finalization , а затем обработать исключения там.

Какова ваша цель? Вы хотите подавить исключение или отладить его? Отладка может быть выполнена путем пошагового их выполнения с помощью F7 , как предложил Zartog. Если вы обнаружите, какое подразделение имеет исключение в финализация , вы можете попытаться разместить его в другом порядке в предложении использования, из которого он вызывается.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...