powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не попадаю в catch?
44 сообщений из 44, показаны все 2 страниц
Почему не попадаю в catch?
    #39906986
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VS 2017
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
	BOOL Synchronize()
	{
		try
		{
			...

			int aaa = 10;
			int bbb = 20;
			int iii = 1 / (bbb - aaa - aaa);

			...
		}
		catch (std::exception err)
		{
			std::wcout << L"err: " << err.what() << std::endl;
			LogErr("BOOL Synchronize()", err.what(), 1);
		}
		std::cin.get();
		return TRUE;
	}


Подскажите, почему не попадаю в catch ?
спасибо
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39906990
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что при делении на ноль не выбрасывается std::exception.

PS: Исключения обычно ловят константной ссылкой, а не значением.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39906997
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Потому что при делении на ноль не выбрасывается std::exception.

PS: Исключения обычно ловят константной ссылкой, а не значением.

надеялся что with SEH поможет
но не помогает
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39906998
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для виндовса читай про SEH
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907002
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите как победить
Код: plaintext
1.
2.
3.
__try
...
__except (HandleStructuredException())



HandleStructuredException is undefined
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907005
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoviewкак победить

1. Встать на него курсором.
2. Нажать F1.
3. Прочитать в открывшейся справке в каком заголовке он объявлен.
4. Подключить этот заголовок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907012
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

listtoviewкак победить

1. Встать на него курсором.
2. Нажать F1.
3. Прочитать в открывшейся справке в каком заголовке он объявлен.
4. Подключить этот заголовок.

так норм
EXCEPTION_EXECUTE_HANDLER
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907013
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
подскажите как победить
Код: plaintext
1.
2.
3.
__try
...
__except (HandleStructuredException())



HandleStructuredException is undefined

Написать функцию HandleStructuredException()

Хэлп читай
https://docs.microsoft.com/ru-ru/cpp/cpp/try-except-statement?view=vs-2019 Если исключение возникает во время выполнения защищенного раздела или в любой подпрограмме, вызванном вызовом защищенного раздела, вычисляется __except выражение (называемое критерием фильтра ), а значение определяет, как обрабатываются исключения. Есть три возможных значения:

EXCEPTION_CONTINUE_EXECUTION (-1) исключение отклонено. Выполнение продолжается в точке, в которой возникло исключение.

EXCEPTION_CONTINUE_SEARCH (0) исключение не распознано. Программа переходит к поиску обработчика в стеке (сначала находятся выражения с оператором try-except, а затем обработчики со следующим наивысшим приоритетом).

Распознано исключение EXCEPTION_EXECUTE_HANDLER (1). Передайте управление обработчику исключений, выполнив составной оператор __except , а затем продолжайте выполнение после блока __except .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#include <windows.h>

void test_seh() {
	__try {
		int aaa = 10;
		int bbb = 20;
		int iii = 1 / (bbb - aaa - aaa);
	} __except (EXCEPTION_EXECUTE_HANDLER) {
		std::cout << "Exception\n";
	}
}



И учти что SEH и исключения С++ не очень хорошо уживаются .
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907016
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
И учти что SEH и исключения С++ не очень хорошо уживаются .

У Рихтера где-то было. Как обработчик SEH бросал исключения C++, т.е. преобразовывал.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907019
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
listtoview
подскажите как победить
Код: plaintext
1.
2.
3.
__try
...
__except (HandleStructuredException())



HandleStructuredException is undefined

Написать функцию HandleStructuredException()

Хэлп читай
https://docs.microsoft.com/ru-ru/cpp/cpp/try-except-statement?view=vs-2019 Если исключение возникает во время выполнения защищенного раздела или в любой подпрограмме, вызванном вызовом защищенного раздела, вычисляется __except выражение (называемое критерием фильтра ), а значение определяет, как обрабатываются исключения. Есть три возможных значения:

EXCEPTION_CONTINUE_EXECUTION (-1) исключение отклонено. Выполнение продолжается в точке, в которой возникло исключение.

EXCEPTION_CONTINUE_SEARCH (0) исключение не распознано. Программа переходит к поиску обработчика в стеке (сначала находятся выражения с оператором try-except, а затем обработчики со следующим наивысшим приоритетом).

Распознано исключение EXCEPTION_EXECUTE_HANDLER (1). Передайте управление обработчику исключений, выполнив составной оператор __except , а затем продолжайте выполнение после блока __except .


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#include <windows.h>

void test_seh() {
	__try {
		int aaa = 10;
		int bbb = 20;
		int iii = 1 / (bbb - aaa - aaa);
	} __except (EXCEPTION_EXECUTE_HANDLER) {
		std::cout << "Exception\n";
	}
}



И учти что SEH и исключения С++ не очень хорошо уживаются .
спасибо
а как текст исключения получить?
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907020
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ставил SetUnhandledException() и из него выкидывал исключения С++. Работало, но было
стрёмно. Поэтому вместо этого я стал из него рушить программу с дампом. Всё равно получние
такого исключения это признак бага, которого надо ловить, а не обрабатывать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907033
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще странно
вот здесь деление на ноль ловит
https://metanit.com/cpp/tutorial/6.2.php
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907035
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
а как текст исключения получить?

Никак. Нет текста.
listtoview
вообще странно
вот здесь деление на ноль ловит
https://metanit.com/cpp/tutorial/6.2.php

А если внимательно код посмотреть?
Код: plaintext
1.
2.
3.
4.
5.
6.
double divide(int a, int b)
{
    if (b == 0)
        throw std::exception();
    return a / b;
}
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907039
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
listtoview
а как текст исключения получить?

Никак. Нет текста.
listtoview
вообще странно
вот здесь деление на ноль ловит
https://metanit.com/cpp/tutorial/6.2.php

А если внимательно код посмотреть?
Код: plaintext
1.
2.
3.
4.
5.
6.
double divide(int a, int b)
{
    if (b == 0)
        throw std::exception();
    return a / b;
}


понял
еще вопрос, как ловить все исключения?
не писать же так всегда

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
		}
		catch (const std::exception & ex)
		{
			LogErr("BOOL Synchronize()", "dd", 0);
		}
		catch (int ex)
		{
			LogErr("BOOL Synchronize()", "dd", 0);
		}
... другие типы double и тд
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907040
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или принято всегда int выбрасывать?
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907048
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoviewкак ловить все исключения?

catch(...)

Но обычно вменяемые программисты точно знают наперёд что может выкинуться из данной
конкретной секции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907053
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

listtoviewкак ловить все исключения?

catch(...)

Но обычно вменяемые программисты точно знают наперёд что может выкинуться из данной
конкретной секции.

а тип исключения?
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907055
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть километр кода
что и где упадет непонятно

вот в c# все наследуются от Exception
можно смело его ловить
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907059
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
есть километр кода
что и где упадет непонятно

вот в c# все наследуются от Exception
можно смело его ловить

В шарпе тоже вероятно умные прогеры не ловят смело его одного))
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907063
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
listtoview
есть километр кода
что и где упадет непонятно

вот в c# все наследуются от Exception
можно смело его ловить

В шарпе тоже вероятно умные прогеры не ловят смело его одного))

конечно
или его одного и проверяют тип

но факт в том что поймать можно
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907064
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
есть километр кода
что и где упадет непонятно

вот в c# все наследуются от Exception
можно смело его ловить

Увы, это недостаток С++. Точнее сказать последствия излишней свободы. И это касается не только исключений, а вообще очень многого.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907065
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите, почему строку не ловит

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
	
try{
...
throw "ggg";
...
}
		catch (int ex)
		{
			LogErr("BOOL Synchronize()", "", ex);
		}
		catch (std::string ex)
		{
			LogErr("BOOL Synchronize()", ex, 0);
		}
		catch (std::wstring ex)
		{
			LogErr("BOOL Synchronize()", WC2MB(ex), 0);
		}
		catch (const std::exception & ex)
		{
			LogErr("BOOL Synchronize()", ex.what(), 0);
		}
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907068
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, я вот не помню. Ловит ли SEH деление на ноль? Я думаю нет.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907069
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
есть километр кода
что и где упадет непонятно

вот в c# все наследуются от Exception
можно смело его ловить

Наследуйся от std::exception. Этот класс создан для исключений, стандартная библиотека его использует. А свой код сам смотри, только тебе видно что там нагорожено.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907070
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview,

Потому что тут тип char *, а не std::string:

Код: plaintext
1.
throw "ggg";



Но если быть точным тут тип char[4].
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907071
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
есть километр кода
что и где упадет непонятно

вот в c# все наследуются от Exception
можно смело его ловить

Может пример приведешь?
Я везде вижу несколько секций catch.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907072
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как то с помощью signal(...) ловил. Но это наверное не ТруЪ
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907075
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну ладно, предусмотрел такие типы исключений, в большинстве случаев думаю хватит


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
		catch (int ex)
		{
			LogErr("BOOL Synchronize()", "", ex);
		}
		catch (const char * ex)
		{
			LogErr("BOOL Synchronize()", ex, 0);
		}		
		catch (const std::exception & ex)
		{
			LogErr("BOOL Synchronize()", ex.what(), 0);
		}
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907078
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoviewесть километр кода
что и где упадет непонятно

Значит надо его вдумчиво читать пока не станет понятно. Это каждодневная работа
программиста, привыкай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907083
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то я читал что очень много научных открытий в физике происходят на пределах.
Тоесть там где величины либо нельзя измерять (слишком малые и слишком большие)
и где есть парадоксы типа деления 0 на 0 или умножения 0 на бесконечность.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907085
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГде-то я читал что очень много научных открытий в физике происходят на пределах.

Чушь. Там происходят не открытия, а генерируются гипотезы, не поддающиеся опровержению.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907103
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Где-то я читал что очень много научных открытий в физике происходят на пределах.
Тоесть там где величины либо нельзя измерять (слишком малые и слишком большие)
и где есть парадоксы типа деления 0 на 0 или умножения 0 на бесконечность.

NaN
?
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907112
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и так. Но математик в таких случаях ковыряет формулы пределов чтобы понять что за
дробью 0/0 обычно сокрыта вполне себе конкретная цифра. Обычно есть методы там... Правило Лопиталя e.t.c.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907116
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Вот прогеры не математики. Взяли и обозначили предел и границу разумности как NaN)))
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907117
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО куда-то вас не туда понесло. Тут же речь не о мат.либах, а о стандартном double, точность представления которого всем известна.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я о подходах. Если софт выбросил NaN то это повод почесать репу каким образом этот Nan вообще появился?
И это кстати не синоним null. Это все таки признак. Статус результата операции.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907125
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Да. Я предпочитаю писать код где неожиданностей нет.
А у автора легси 1000 строк. Он по другому.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907127
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щас скажу очередную рекламу для PVS-Studio. Но легаси тоже надо гнать через статик анализаторы.
Кстати реально много подводных тараканов в шкафах всплывает. И утечки памяти. И выходы за границы
массивов и прочее.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907193
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
еще вопрос, как ловить все исключения?
не писать же так всегда

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
		}
		catch (const std::exception & ex)
		{
			LogErr("BOOL Synchronize()", "dd", 0);
		}
		catch (int ex)
		{
			LogErr("BOOL Synchronize()", "dd", 0);
		}
... другие типы double и тд


всё что можно надо ловить на этапе compile через static assert ( CG: P.5 , а также 6, 7, etc)
остальное ловится в runtime через:
- assert;
- constructors; // вот тут легче всего catch ошибку за минимум кода
- exceptions;

затея типа в main() сделать:
Код: plaintext
1.
try {myapp();} catch () {...}


наверное не сможет проследить полный путь?
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907197
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
listtoview
еще вопрос, как ловить все исключения?
не писать же так всегда

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
		}
		catch (const std::exception & ex)
		{
			LogErr("BOOL Synchronize()", "dd", 0);
		}
		catch (int ex)
		{
			LogErr("BOOL Synchronize()", "dd", 0);
		}
... другие типы double и тд


всё что можно надо ловить на этапе compile через static assert ( CG: P.5 , а также 6, 7, etc)
остальное ловится в runtime через:
- assert;
- constructors; // вот тут легче всего catch ошибку за минимум кода
- exceptions;

затея типа в main() сделать:
Код: plaintext
1.
try {myapp();} catch () {...}


наверное не сможет проследить полный путь?

а тип ошибки?
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907262
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Но математик в таких случаях ковыряет формулы пределов чтобы понять что за дробью 0/0 обычно сокрыта вполне себе конкретная цифра.
Это уж как повезёт - "вполне конкретной цифрой" может и бесконечность оказаться и новая неопределённость.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907514
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опытным путем выяснил что крипто апи и ф-и со строками выбрасывают std::exception
в большинстве случаев
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907634
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как жеж тяжело вам программировать-та.
...
Рейтинг: 0 / 0
Почему не попадаю в catch?
    #39907819
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как жеж тяжело вам программировать-та.

а кому сейчас легко
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не попадаю в catch?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]