Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Исключение на плавающих числах

479
30 апреля 2010 года
Ухух
142 / / 05.05.2006
Столкнулся с тем , что когда проверяю "плавываемость числа" в блоке try{}catch(...) когда выполняется операция с неплавающим числом, происходит генерация системного сообщения InvalidFloatinPoint Operation. Но блок-то ставился именно чтобы перехватить такие сообщения! Кто-то сталкивался с такой ситуацией?
14
30 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Отключить "Stop on ... exceptions" в настройках дебаггера.
479
30 апреля 2010 года
Ухух
142 / / 05.05.2006
Да вот не помогает это. Случайно полез проверять кусок, кода который несколько лет уже заказчикам отдается и получил, что не все так хорошо.

Может как-то можно вообще отключить сообщения от исключений Application?
14
30 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
При запуске без дебаггера это исключение вылетает?
479
30 апреля 2010 года
Ухух
142 / / 05.05.2006
Да. Я уже и релиз ставлю и запускаю не из под среды, а exe файл.
1
30 апреля 2010 года
kot_
7.3K / / 20.01.2000
Ну вообще то сообщения надо не отключать, а обрабатывать.
Если ваше исключение не попадает в catch - то возможно оно генерируется за его пределами?
14
30 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Действительно в таком случае или не попадает, или см. настройки компилятора.
479
30 апреля 2010 года
Ухух
142 / / 05.05.2006
Да уже думал. Отключать совершенно не хочется . Буду еще препарировать.
14
30 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
"Отключить" исключения можно только в дебаггере, чтобы он не всплывал на first-chance исключениях а позволял программе их обработать.
479
04 мая 2010 года
Ухух
142 / / 05.05.2006
Ну вот примерно что увидел.
Работа с неправильным плавающим числом с операциями + - * и / не вызывает исключений и каких бы то ни было сообщений. Операция отношения (< > !=) мгновенно вызывает исключение и вывод сообщения "Инвалид плавающая операция бу бу бу". Блок try не спасает совершенно.
Единственно что заработало , это проверка числа , которое может быть не плавающим функцией _isnan до всех операций в которых это число может участвовать и доперехват исключений:

в хедере:
 
Код:
void __fastcall MEx(TObject *Sender,Exception *E);


в крейте формы:
 
Код:
Application->&#111;&#110;Exception=MEx;//


в описаниях функций:
 
Код:
void __fastcall TForm1::MEx(TObject *Sender,Exception *E)
{
;
}


Сразу скажу, что такое поведение повторялось на двух машинах под ME и XP под 4 билдером.

На третьей под XP, блок try все ловил, но под 2006.

Скорее всего, надо еще копаться с 8087, но если кто осилит, попрошу поделиться.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог