powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не попадаю в catch?
25 сообщений из 44, страница 1 из 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
25 сообщений из 44, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему не попадаю в catch?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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