Исключение на плавающих числах
Столкнулся с тем , что когда проверяю "плавываемость числа" в блоке try{}catch(...) когда выполняется операция с неплавающим числом, происходит генерация системного сообщения InvalidFloatinPoint Operation. Но блок-то ставился именно чтобы перехватить такие сообщения! Кто-то сталкивался с такой ситуацией?
Отключить "Stop on ... exceptions" в настройках дебаггера.
Может как-то можно вообще отключить сообщения от исключений Application?
При запуске без дебаггера это исключение вылетает?
Да. Я уже и релиз ставлю и запускаю не из под среды, а exe файл.
Если ваше исключение не попадает в catch - то возможно оно генерируется за его пределами?
Действительно в таком случае или не попадает, или см. настройки компилятора.
Да уже думал. Отключать совершенно не хочется . Буду еще препарировать.
"Отключить" исключения можно только в дебаггере, чтобы он не всплывал на first-chance исключениях а позволял программе их обработать.
Работа с неправильным плавающим числом с операциями + - * и / не вызывает исключений и каких бы то ни было сообщений. Операция отношения (< > !=) мгновенно вызывает исключение и вывод сообщения "Инвалид плавающая операция бу бу бу". Блок try не спасает совершенно.
Единственно что заработало , это проверка числа , которое может быть не плавающим функцией _isnan до всех операций в которых это число может участвовать и доперехват исключений:
в хедере:
Код:
void __fastcall MEx(TObject *Sender,Exception *E);
в крейте формы:
Код:
Application->onException=MEx;//
в описаниях функций:
Код:
void __fastcall TForm1::MEx(TObject *Sender,Exception *E)
{
;
}
{
;
}
Сразу скажу, что такое поведение повторялось на двух машинах под ME и XP под 4 билдером.
На третьей под XP, блок try все ловил, но под 2006.
Скорее всего, надо еще копаться с 8087, но если кто осилит, попрошу поделиться.