Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/37: Рейтинг темы: голосов - 37, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 29

Try Catch не ловит ошибку

06.06.2012, 03:38. Показов 7803. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
в программе есть такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
try
{
DataModule3->IBDatabase1->DatabaseName=B;
DataModule3->IBDatabase1->Connected=true;
DataModule3->IBTransaction1->Active=true;
DataModule3->IBTable1->Active=true;
}
catch(...)
{
ShowMessage("Error!");
}
Заведомо в Edit1 вбил текст, но на выходи ошибка билдера - не может преобразовать из строк в число. Как заставить вывести вместо этого ShowMessage("Error!")?

Ситуация не зависит от компонентов - даже если строку в число конвертить, все равно ошибка билдера вылетает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2012, 03:38
Ответы с готовыми решениями:

Try-catch не ловит исключения
try { ftpClient.directoryListSimple("test"); } catch { ...

Try/catch не ловит все исключения
есть код: try { curlpp::Easy myRequest; myRequest.setOpt(new curlpp::options::Url("https://www.fl.ru/")); std::ostringstream os;...

ПОЧЕМУ std::erxception не ловит ошибку?
Решил изучить try, catch/Объясните плиз.Не пойму, почему catch не ловит ошибку?ПРогаю на MSVS 2008/ #include<stdexcept> #include...

25
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
06.06.2012, 03:48
Это вроде где то как то в настройках Buider-a делается но как непомню
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.06.2012, 04:10
ЛыжнечеГ, в таких случаях принято не заниматься отсебятиной, а дословно цитировать ошику и строку кода, к которой она относистся.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
06.06.2012, 06:38
ошибка в функции StrToInt всегда перехватывается. на верх иногда уходят внутренние ошибки компонентов. но у вас нет таких. вы просто не обрабатываете исключения для вызовов с TEdit и StrToInt - их ведь нету внутри блока try.
0
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 29
06.06.2012, 10:29  [ТС]
Нашел проблему - странно, но при запуске приложения из билдера - ошибка, если само приложение открыть - все работает...
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2012, 10:47
По умолчанию в debug'е Билдер всё равно генерирует исключение,
для того, чтобы отключить это, когда появится окошко с исключением, поставить галочку,
там где написано Ignore this type of exception.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.06.2012, 10:51
catch(...) не всегда в Builder ловит все ошибки- нужно указывать класс возможного исключения.

По умолчанию в debug'е Билдер всё равно генерирует исключение,
для того, чтобы отключить это, когда появится окошко с исключением, поставить галочку,
там где написано Ignore this type of exception.
лучше просто жать кнопку continue- после нее сразу должен выскачить мессадж
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
06.06.2012, 11:08
Цитата Сообщение от Avazart Посмотреть сообщение
catch(...) не всегда в Builder ловит все ошибки
возможно ли это? подробности.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2012, 12:21
Цитата Сообщение от Avazart Посмотреть сообщение
лучше просто жать кнопку continue- после нее сразу должен выскачить мессадж
То что "лучше" - это пользователю решать, возможно необходимо отладить работу в цикле,
так что, каждый раз на кнопку continue жать? Я человеку объяснил, как отключить это в Билдере в принципе.

Добавлено через 2 минуты
Допустим, в Visual Studio в дебаге при try {} catch ничего не генерируется,
так что это чисто билдеровская фича
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.06.2012, 12:22
возможно необходимо отладить работу в цикле,
так что, каждый раз на кнопку continue жать?
Ну код конкретен -нет там цикла.А если б там был то ShowMessage -не подходит так как все равно придется жать
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2012, 12:26
Цитата Сообщение от Avazart Посмотреть сообщение
catch(...) не всегда в Builder ловит все ошибки
Это действительно так, например, если жесткая ошибка, когда приложение вообще крэшится.

Цитата Сообщение от Avazart Посмотреть сообщение
нужно указывать класс возможного исключения
Если исключение отлавливается по указанному классу, то по "..." множеству аргументов,
оно тоже отловится.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.06.2012, 12:33
Допустим, в Visual Studio в дебаге при try {} catch ничего не генерируется,так что это чисто билдеровская фича
Че за чушь?
Другое дело что VS вообще как неправильно с исключениями работает...
Миниатюры
Try Catch не ловит ошибку  
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.06.2012, 12:44
Насчет
catch(...) не всегда в Builder ловит все ошибки
Возможно я ошибаюсь... сейчас не могу вспомнить пример...
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2012, 12:47
Цитата Сообщение от Avazart Посмотреть сообщение
Че за чушь?
Я тебе уже говорил когда-то, что твой тон мне очень не нравится.

Прежде чем упрекать, необходимо разобраться.
Твоё исключение, которые ты привёл, оно не пропускается компилятором Visual Studio,
попробуй нажать continue и ты увидишь, что дальше компилятор тебя не пустит.

А теперь попробуй выполнить вот этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
 
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{
    try {
        throw std::exception("My exception");
    } catch(...) {
        std::cout << "Test exception" << std::endl;
    }
    return 0;
}
Он у тебя спокойно выполнится без всякой генерации исключений

Добавлено через 1 минуту
Можешь вот этот код попробовать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
 
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{
    try {
        throw std::bad_alloc();
    } catch(...) {
        std::cout << "Test exception" << std::endl;
    }
    return 0;
}
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.06.2012, 13:02
, оно не пропускается компилятором Visual Studio,
попробуй нажать continue и ты увидишь, что дальше компилятор тебя не пустит.
Вот я и говорю как-то неправильно, почему неотлавливается?
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2012, 13:10
Потому что деление на ноль - это ошибка, которая генерируется на уровне операционной системы и у разных компиляторов она обрабатывается по разному

Добавлено через 1 минуту
Структурная обработка исключений операционной системы Windows
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.06.2012, 13:13
и у разных компиляторов она обрабатывается по разному
Точнее сказать у некоторых необрабатывается
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2012, 13:20
Цитата Сообщение от Maluda Посмотреть сообщение
Потому что деление на ноль - это ошибка, которая генерируется на уровне операционной системы
Сейчас почитал, оказывается деление на ноль - это ошибка даже на уровне процессора.

Добавлено через 4 минуты
В компиляторе Visual Studio в debug'е это исключение является необрабатываем,
в релизе его можно отлавливать с помощью try {} catch, при этом как я уже и говорил,
в Visual Studio не будет никаких дополнительных message.

Измени свойства своего проекта VS с делением на ноль на релиз и запусти.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
06.06.2012, 18:22
Maluda, у меня bad_alloc() из вашего примера выскакивает как положено, в чем прикол?
а по поводу "не все отлавливаются" - так речь же об исключениях - если что то не является исключением и не отлавливается то мы об это не говорим))
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
06.06.2012, 18:25
vxg, речь шла о std::bad_alloc в визуал студии
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2012, 18:25
Помогаю со студенческими работами здесь

Не ловит Exception а NumberFormatException ловит
Добрый день. Метод проверяющий строку на только цифры(работает): public boolean isNumber(String s) throws NumberFormatException { ...

Конструкция Try - Catch выдает ошибку в приведенном коде
Всем привет.Делаю лаунчер и возникла необходимость загрузки файла(архива),для того чтобы программа не выбивала ошибку я собрал два блока...

Как в catch выловить именно ту ошибку которая происходит при подключении к sql?
Как в catch выловить именно ту ошибку которая происходит при подключении, т.е. подключение не было установлено. Exception не подходит....

Конструкция try catch в цикле while. Зацикливается блок catch
Здравствуйте. Столкнулся с проблемой: при попытке запихнуть в цикл конструкцию try catch - зацикливается часть, расположенная в блоке...

Iphone 6 не ловит Wi-Fi в другой комнате, а другой Iphone 5 ловит
Здравствуйте! Помогите, пожалуйста с проблемой. Iphone 6 ловит wi-fi только в комнате с роутером, а в других не ловит совсем.. Хотя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru