Исключения VCL в C++ Builder 5

Я пытаюсь контролировать исключения, возникающие в коде, однако этот пример не работает, как это должно быть в C++ Builder 5.

void __fastcall TForm1::Button1Click(TObject *Sender)
{ 
    try
    {
         throw Exception("NoNumber");
    }
    catch(Exception& E)
    {
        // but we never get the LALAL message
        ShowMessage("LALAL");
    }
}

Почему блок catch никогда не достигается при возникновении исключения?

1 ответ

Решение

Во-первых, вы должны ловить исключения по const ссылка вместо:

catch(const Exception& E)

Это позволяет компилятору генерировать немного более эффективный код для управления исключением. Однако одно это не помешало бы исключению быть пойманным.

Если вы запускаете приложение внутри отладчика, имейте в виду, что отладчик сначала поймает исключение, поэтому вы должны указать отладчику передать исключение обратно в ваше приложение для нормальной обработки, нажав клавишу F9 или кнопку на панели инструментов "Выполнить", или настроить отладчик так, чтобы он игнорировал исключения.

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

Я использовал BCB5 в течение многих лет, и этот тип кода всегда работал хорошо для меня (хотя я всегда использую const).

Другие вопросы по тегам