Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Visual Studio 2010 некорректно работает, Не находит ошибки доступа к памяти 
:(
    Опции темы
asp1rant
Дата 4.5.2010, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
все настройки по умолчанию.
как исправить?
PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(asp1rant @  4.5.2010,  06:44 Найти цитируемый пост)
access violation(или что там)
 - это SEH исключения, их сиплюсплюсшным try-catch-ом не поймаешь..да их и не надо ловить, надо писать так, чтобы они не вылетали.
Если ну очень надо - тогда так
Код

__try {
    int * t = NULL;
    *t = 0;
} __except (EXCEPTION_EXECUTE_HANDLER) {
    std::cout << "SEH exception" << std::endl;
}


Это сообщение отредактировал(а) azesmcar - 4.5.2010, 13:49
PM   Вверх
Abyx
Дата 4.5.2010, 14:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



Цитата(azesmcar @  4.5.2010,  13:47 Найти цитируемый пост)
- это SEH исключения, их сиплюсплюсшным try-catch-ом не поймаешь..

это аппаратные исключения, 
представляете, в никсах SEH нет, а такие исключения есть!

в msvc try-catch реализуется через SEH опцией компилятора.
впрочем оно и так должно работать
PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Abyx @  4.5.2010,  14:18 Найти цитируемый пост)
это аппаратные исключения, 

и что? одно как-то мешает другому?
Цитата

Structured exception handling (SEH) is a mechanism for handling both hardware and software exceptions. Therefore, your code will handle hardware and software exceptions identically.

Цитата

Exceptions can be initiated by hardware or software, and can occur in kernel-mode as well as user-mode code. Structured exception handling provides a single mechanism for the handling of kernel-mode and user-mode exceptions.

The execution of certain instruction sequences can result in exceptions that are initiated by hardware. For example, an access violation is generated by the hardware when a process attempts to read from or write to a virtual address to which it does not have the appropriate access.


Цитата(Abyx @  4.5.2010,  14:18 Найти цитируемый пост)
представляете, в никсах SEH нет, а такие исключения есть!

 smile боже мой...и что? представляете, мы говорим о Visual Studio и windows и юникс тут совсем уж непричем.

мне хотелось бы понять, у вас было просто желание что-то написать или вы с чем-то несогласны? тогда с чем именно?
Цитата

это SEH исключения

т.е. это не обычное C++ исключение и должно ловиться методами structured exception handling.
с этим?
Цитата

их сиплюсплюсшным try-catch-ом не поймаешь

с этим?
или вы считаете, что вот так
Код

__try {
    int * t = NULL;
    *t = 0;
} __except (EXCEPTION_EXECUTE_HANDLER) {
    std::cout << "SEH exception" << std::endl;
}

access violation не ловиться?


Это сообщение отредактировал(а) azesmcar - 4.5.2010, 14:47
PM   Вверх
Abyx
Дата 4.5.2010, 15:14 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



azesmcar, 
1. Термин "SEH исключения" - неверный впринципе. Исключения не зависят от того что их ловит, особенно аппаратные.
2. AV ловится try-catch блоком С++

Справочная информация:
Цитата("Windows Via C/C++")

However, you should know that Microsoft's Visual C++ compiler has implemented C++ exception handling using the operating system's structured exception handling. So, when you create a C++ try block, the compiler is generating an SEH __try block. A C++ catch test becomes an SEH exception filter, and the code in the catch block becomes the code in the SEH __except block.


Добавлено через 4 минуты и 57 секунд
Цитата(asp1rant @  4.5.2010,  06:44 Найти цитируемый пост)
выполение доходит до этой строчки и программа тупо вылетает. а должно бросаться исключение, типа, access violation(или что там).
из-за этого не могу нормально отлаживать программы, везде где есть массивы, или указатели, у которых что-то неверно с памятью - там сразу вылетает :(

исключение бросается в любом случае.
возможно у вас неправильно настроен отладчик

Добавлено через 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
PM MAIL   Вверх
Abyx
Дата 4.5.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



разумеется чтобы try-catch ловил AV, надо компилить код с опцией /EHa (Enable C++ Exceptions = "Yes with SEH Exceptions (/EHa)")

однако это не делает AV "SEH-исключением" =)
PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 15:46 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Abyx @  4.5.2010,  15:14 Найти цитируемый пост)
Термин "SEH исключения" - неверный впринципе. 


Цитата(Abyx @  4.5.2010,  15:14 Найти цитируемый пост)
Исключения не зависят от того что их ловит, особенно аппаратные.

ну и? еще одно сообщение не в тему..причем тут это? я где-то говорил, что они зависят от того, что их ловит?

Цитата(Abyx @  4.5.2010,  15:35 Найти цитируемый пост)
Yes with SEH Exceptions 

пора писать жалобу в микрософт, они неверные термины используют smile 

Цитата(Abyx @  4.5.2010,  15:14 Найти цитируемый пост)
However, you should know that Microsoft's Visual C++ compiler has implemented C++ exception handling using the operating system's structured exception handling. So, when you create a C++ try block, the compiler is generating an SEH __try block. A C++ catch test becomes an SEH exception filter, and the code in the catch block becomes the code in the SEH __except block.

Справочная информация:
Цитата

Aleksandr Sergeyevich Pushkin (Russian: Алекса́ндр Серге́евич Пу́шкин, pronounced [ɐlʲɪˈksandr sʲɪˈrɡʲejevʲɪtɕ ˈpuʃkʲɪn]  ( listen)) (June 6 [O.S. May 26] 1799–February 10 [O.S. January 29] 1837) was a Russian author of the Romantic era[1] who is considered by many to be the greatest Russian poet[2][3][4][5] and the founder of modern Russian literature.[6][7] Pushkin pioneered the use of vernacular speech in his poems and plays, creating a style of storytelling—mixing drama, romance, and satire—associated with Russian literature ever since and greatly influencing later Russian writers. He also wrote historical fiction. His Marie: A Story of Russian Love provides insight into Russia during the reign of Catherine the Great.

отличная справочная информация, только совершенно не в тему.

Цитата(Abyx @  4.5.2010,  15:14 Найти цитируемый пост)
2. AV ловится try-catch блоком С++

Цитата(Abyx @  4.5.2010,  15:35 Найти цитируемый пост)
разумеется чтобы try-catch ловил AV, надо компилить код с опцией /EHa (Enable C++ Exceptions = "Yes with SEH Exceptions (/EHa)")

AV НЕ ЛОВИТЬСЯ блоком try-catch. Причем тут опции компилятора? если вы говорите о C++ - то уж будьте любезны, не вмешивайте сюда студию, где в стандарте сказано, что это try-catch ловит AV? Прошу указать главу и строку, иначе этот разговор лишен всякого смысла.
Если завтра в опции VS добавят галочку, которая сделает int типом с плавающей запятой вы будете писать, что int это тип с плавающей запятой?

Это сообщение отредактировал(а) azesmcar - 4.5.2010, 15:59
PM   Вверх
Abyx
Дата 4.5.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



Цитата(azesmcar @  4.5.2010,  15:46 Найти цитируемый пост)
пора писать жалобу в микрософт, они неверные термины используют

Ага, в в русской версии студии эта строчка выглядит как "Да, с SEH исключениями (/EHa)".
Однако словосочетание "SEH исключения" не верно, т.к. SEH - это structured exception handling - способ обработки исключений,
а исключения не связаны с способом их обработки, они такие же SEH исключения, как и VEH исключения, UnhandledExceptionHandler-исключения, ИсключенияПойманныеОтладчиком-исключения, и ЛюбойДругойСпособОбработкиИсключений-исключения.
Цитата(azesmcar @  4.5.2010,  15:46 Найти цитируемый пост)
Цитата(Abyx @  4.5.2010,  15:35 Найти цитируемый пост)
SEH-исключением

вы опять используете неправильный термин...ай ай ай.

Убирая кавычки, Вы искажаете смысл цитаты. Это была цитата Вас, а не использование мной этого неправильного термина.
PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Abyx @  4.5.2010,  15:57 Найти цитируемый пост)
Ага, в в русской версии студии эта строчка выглядит как "Да, с SEH исключениями (/EHa)".
Однако словосочетание "SEH исключения" не верно, т.к. SEH - это structured exception handling - способ обработки исключений,

ага, в русском звучит также, никаких проблем с переводом. Только вот вы почему-то решили что повсеместно используемый термин вдруг стал неправильным..понятно smile 
Я уже написал в первом посте, одно другому не мешает, это аппаратное исключение, но смысл моего поста был не рассказать о внутренностях AV а рассказать о его отлове, что термин SEH довольно понятно выражает, и термин SEH exception я не из себя придумал, как видите он довольно часто используется, в том числе и Microsoft-ом.

Это сообщение отредактировал(а) azesmcar - 4.5.2010, 16:05
PM   Вверх
Abyx
Дата 4.5.2010, 16:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



Цитата(azesmcar @  4.5.2010,  15:46 Найти цитируемый пост)
причем тут опции компилятора? если вы говорите о C++ - то уж будьте любезны, не вмешивайте сюда студию, где в стандарте сказано, что это try-catch ловит AV? Прошу указать главу и строку, иначе разговор про try-catch C++ не имеет никакого смысла. 

Не передергивайте, то Вы говорите "представляете, мы говорим о Visual Studio и windows", то вдруг оказывается что речь о стандартном С++.

Опции компилятора при том, какой код будет генериться, и что он будет делать. Там можно вообще убрать исключения С++.
В стандарте нет определения AV, т.к. это особенность конкретной платформы.
Зато в стандарте сказано что catch(...) ловит любые исключения.
Цитата("ISO\IEC 14882 15.3 p5")

A ... in a handler’s exception-declaration functions similarly to ... in a function parameter declaration; it
specifies a match for any exception.


Добавлено через 1 минуту и 18 секунд
azesmcar, а почему вы называете AV "SEH exception", не "VEH exception"?

Добавлено через 3 минуты и 55 секунд
Цитата(azesmcar @  4.5.2010,  16:01 Найти цитируемый пост)
как видите он довольно часто используется, в том числе и Microsoft-ом.

Я вижу что ГУИ писали и локализовали безграмотные люди.
Например у Рихтера я что-то не встречал термина "SEH exception".
PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Abyx @  4.5.2010,  16:07 Найти цитируемый пост)
Не передергивайте, то Вы говорите "представляете, мы говорим о Visual Studio и windows", то вдруг оказывается что речь о стандартном С++.

и что? smile мы не можем говорить о разном? сперва я говорил про VS, потом говорил про C++, во время разговора про VS вы упомянули Unix а во время разговора про C++ вы упоминаете опции VS. Я сказал что стандартный C++ try-catch это исключение не поймает, вы говорите что поймает..если компилятор VS соответственно настроить..чувствуете?

Цитата(Abyx @  4.5.2010,  16:07 Найти цитируемый пост)
Зато в стандарте сказано что catch(...) ловит любые исключения.

конечно, я думаю чтобы понять что речь идет о C++ исключениях не надо быть гением.

PM   Вверх
Abyx
Дата 4.5.2010, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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" там почему-то нет.

PM MAIL   Вверх
azesmcar
Дата 4.5.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Abyx @  4.5.2010,  16:07 Найти цитируемый пост)
azesmcar, а почему вы называете AV "SEH exception", не "VEH exception"?

имелось ввиду, что это ловиться с помощью SEH а не C++ try-catch -а. Еслиб я предлагал VEH может быть я так бы и написал. 
повторюсь
Цитата(azesmcar @  4.5.2010,  14:30 Найти цитируемый пост)
т.е. это не обычное C++ исключение и должно ловиться методами structured exception handling.

т.е. с этим вы не согласны?

Добавлено @ 16:48
Цитата(Abyx @  4.5.2010,  16:22 Найти цитируемый пост)
azesmcar, а что по вашему - C++ исключения?
Если я скажу вам, что ядро написано на С++, и оно делает throw когда ловит AV, то AV станет C++ исключением?

нет, потому что до моей программы это C++ исключение не доходит, его кто-то там ловит и выдает в несколько ином виде.
Цитата(Abyx @  4.5.2010,  16:22 Найти цитируемый пост)
Кстати "SEH исключения" - "структурированная обработка исключений исключения" - это безграмотно не только с точки зрения значения этой фразы, но и с точки зрения правил русского языка. В свою очередь "Structured Exception Handling Exception" - это безграмотно с точки зрения английского языка.

тоже самое можно сказать и про словосочетание "SQL Query", но его используют.

Это сообщение отредактировал(а) azesmcar - 4.5.2010, 17:04
PM   Вверх
SVN74
Дата 4.5.2010, 17:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Хух...  smile  Turbo C++ ловит smile 
PM MAIL WWW   Вверх
Abyx
Дата 4.5.2010, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



Цитата(azesmcar @  4.5.2010,  16:46 Найти цитируемый пост)
т.е. это не обычное C++ исключение и должно ловиться методами structured exception handling.
т.е. с этим вы не согласны?

Отловом исключений должен заниматься компилятор. Как именно он это сделает - это его проблемы. Совсем не обязательно, чтобы исключение ловилось SEH. Оно может ловиться VEH, оно может ловиться обработчиком по умолчанию.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.