Кент Рейсдорф. BORLAND C++BUILDER. Раздел 4
Кент Рейсдорф. BORLAND C++BUILDER. Страница 412
void fastcall TMainForm::OnException(TObject* Sender, Exception* E)
{
// сделайте здесь то, что нужно для обработки исключения, // а затем выведите сообщение об ошибке Application->ShowException(Е);
}
Теперь окно с сообщением об ошибке будет отображаться так же, кйк и при реакции VCL на необрабатываемое исключение.
Как видите, обработка исключений на уровне приложения достаточно сложна, поэтому лучше не заниматься этим до тех пор, пока вы не будете абсолютно уверены в своих действиях.
Отладка с обработкой исключений
Если в программе применяется обработка исключений, то ее отладка может несколько усложниться. Каждый раз, когда формируется исключение, отладчик приостанавливает выполнение программы на блоке catch, как если бы в этой строке была установлена контрольная точка. Если блок catch находится в вашем коде, будет выведена точка выполнения, как и при обычной остановке в контрольной точке. Вы можете снова запустить программу, щелкнув на кнопке Run, или перейти к пошаговому выполнению кода.
Иногда блок catch находится в коде VCL. Это будет иметь место для тех исключений VOL, которые вы не обрабатываете в своем коде. В таком случае точку выполнения можно увидеть с помощью CPU View.
Другой аспект отладки с исключениями состоит в том, что окно сообщения для исключения VCL будет выведено даже в том случае, если вы самостоятельно обрабатываете исключение. Это обстоятельство может путать и несколько раздражать, если вы не сталкивались с этим прежде. Чтобы предотвратить вывод окна сообщения VCL, а также остановку программы при формировании исключения, откройте вкладку Preferences диалогового окна Environment Options и сбросьте флажок Break on Exceptions (Прерывание при исключении). В этом случае отладчик не будет приостанавливать выполнение программы при формировании исключения.