![]() |
|
Модераторы: bsa |
![]()
|
|
| asp1rant |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 23.12.2009 Репутация: нет Всего: нет |
Использую VS2010 ultimate trial; win7 eng x64 pro
суть проблемы: создаю я например переменную int* a = NULL; и сразу пишу : *a = 1; выполение доходит до этой строчки и программа тупо вылетает. а должно бросаться исключение, типа, access violation(или что там). из-за этого не могу нормально отлаживать программы, везде где есть массивы, или указатели, у которых что-то неверно с памятью - там сразу вылетает :( до этого сидел на vs2010 RC1, та же лажа была, думал поставлю релиз и все исправится, а нет. пишу win32 project, console app. юзаю winAPI. все настройки по умолчанию. как исправить? |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
- это SEH исключения, их сиплюсплюсшным try-catch-ом не поймаешь..да их и не надо ловить, надо писать так, чтобы они не вылетали.
Если ну очень надо - тогда так
Это сообщение отредактировал(а) azesmcar - 4.5.2010, 13:49 |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
||||
|
||||
| azesmcar |
|
||||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
и что? одно как-то мешает другому?
мне хотелось бы понять, у вас было просто желание что-то написать или вы с чем-то несогласны? тогда с чем именно?
т.е. это не обычное C++ исключение и должно ловиться методами structured exception handling. с этим?
с этим? или вы считаете, что вот так
access violation не ловиться? Это сообщение отредактировал(а) azesmcar - 4.5.2010, 14:47 |
||||||||||
|
|||||||||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
azesmcar,
1. Термин "SEH исключения" - неверный впринципе. Исключения не зависят от того что их ловит, особенно аппаратные. 2. AV ловится try-catch блоком С++ Справочная информация:
Добавлено через 4 минуты и 57 секунд исключение бросается в любом случае. возможно у вас неправильно настроен отладчик Добавлено через 11 минут и 53 секунды Сейчас проверил у себя (Microsoft Visual C++ 2010 RC1) - все работает как надо - при простом запуске(ctrl-F5) вылезает системное сообщение об ошибке, при запуске под отладчиком (F5) вылезает сообщение о AV: "Unhandled exception at 0x00f91378 in av_test.exe: 0xC0000005: Access violation writing location 0x00000000." Это сообщение отредактировал(а) Abyx - 4.5.2010, 15:15 |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
разумеется чтобы try-catch ловил AV, надо компилить код с опцией /EHa (Enable C++ Exceptions = "Yes with SEH Exceptions (/EHa)")
однако это не делает AV "SEH-исключением" =) |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
ну и? еще одно сообщение не в тему..причем тут это? я где-то говорил, что они зависят от того, что их ловит? пора писать жалобу в микрософт, они неверные термины используют Справочная информация:
отличная справочная информация, только совершенно не в тему.
AV НЕ ЛОВИТЬСЯ блоком try-catch. Причем тут опции компилятора? если вы говорите о C++ - то уж будьте любезны, не вмешивайте сюда студию, где в стандарте сказано, что это try-catch ловит AV? Прошу указать главу и строку, иначе этот разговор лишен всякого смысла. Если завтра в опции VS добавят галочку, которая сделает int типом с плавающей запятой вы будете писать, что int это тип с плавающей запятой? Это сообщение отредактировал(а) azesmcar - 4.5.2010, 15:59 |
||||
|
|||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
Ага, в в русской версии студии эта строчка выглядит как "Да, с SEH исключениями (/EHa)". Однако словосочетание "SEH исключения" не верно, т.к. SEH - это structured exception handling - способ обработки исключений, а исключения не связаны с способом их обработки, они такие же SEH исключения, как и VEH исключения, UnhandledExceptionHandler-исключения, ИсключенияПойманныеОтладчиком-исключения, и ЛюбойДругойСпособОбработкиИсключений-исключения.
Убирая кавычки, Вы искажаете смысл цитаты. Это была цитата Вас, а не использование мной этого неправильного термина. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
ага, в русском звучит также, никаких проблем с переводом. Только вот вы почему-то решили что повсеместно используемый термин вдруг стал неправильным..понятно Я уже написал в первом посте, одно другому не мешает, это аппаратное исключение, но смысл моего поста был не рассказать о внутренностях AV а рассказать о его отлове, что термин SEH довольно понятно выражает, и термин SEH exception я не из себя придумал, как видите он довольно часто используется, в том числе и Microsoft-ом. Это сообщение отредактировал(а) azesmcar - 4.5.2010, 16:05 |
|||
|
||||
| Abyx |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
Не передергивайте, то Вы говорите "представляете, мы говорим о Visual Studio и windows", то вдруг оказывается что речь о стандартном С++. Опции компилятора при том, какой код будет генериться, и что он будет делать. Там можно вообще убрать исключения С++. В стандарте нет определения AV, т.к. это особенность конкретной платформы. Зато в стандарте сказано что catch(...) ловит любые исключения.
Добавлено через 1 минуту и 18 секунд azesmcar, а почему вы называете AV "SEH exception", не "VEH exception"? Добавлено через 3 минуты и 55 секунд
Я вижу что ГУИ писали и локализовали безграмотные люди. Например у Рихтера я что-то не встречал термина "SEH exception". |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
и что? конечно, я думаю чтобы понять что речь идет о C++ исключениях не надо быть гением. |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
azesmcar, а что по вашему - C++ исключения?
Если я скажу вам, что ядро написано на С++, и оно делает throw когда ловит AV, то AV станет C++ исключением? Кстати "SEH исключения" - "структурированная обработка исключений исключения" - это безграмотно не только с точки зрения значения этой фразы, но и с точки зрения правил русского языка. В свою очередь "Structured Exception Handling Exception" - это безграмотно с точки зрения английского языка. http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx Вот тут написано какие бывают исключения, и "Structured Exception Handling Exception" там почему-то нет. |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
имелось ввиду, что это ловиться с помощью SEH а не C++ try-catch -а. Еслиб я предлагал VEH может быть я так бы и написал. повторюсь
т.е. с этим вы не согласны? Добавлено @ 16:48
нет, потому что до моей программы это C++ исключение не доходит, его кто-то там ловит и выдает в несколько ином виде. тоже самое можно сказать и про словосочетание "SQL Query", но его используют. Это сообщение отредактировал(а) azesmcar - 4.5.2010, 17:04 |
||||||
|
|||||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
Хух...
|
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
Отловом исключений должен заниматься компилятор. Как именно он это сделает - это его проблемы. Совсем не обязательно, чтобы исключение ловилось SEH. Оно может ловиться VEH, оно может ловиться обработчиком по умолчанию. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |