__try
От: Kingofastellarwar Украина  
Дата: 31.01.08 12:49
Оценка:
Есть такой код:
void Start(HINSTANCE i)
{
    char  * p = null;
    *p = L'h';
}

int APIENTRY WinMain(HINSTANCE i, HINSTANCE pi, LPSTR lpCmdLine, int nCmdShow)
{
    __try
    {
        Start(i);
    }
    __except(RecordExceptionInfo(GetExceptionInformation(), L"WinMain"))
    {
    }
    
    return 0;
}


он работал, а потом перестал работать т.е. не перехватывает исключение, а вызывает отдалдчик.
по каким причинам такое может быть? Компилируется с /EHsc.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: __try
От: Left2 Украина  
Дата: 31.01.08 12:55
Оценка:
Есть подозрение что ты запускаешь приложение в режиме отладки из-под Visual Studio, а в окошке Debug/Exceptions у тебя для подобных исключений стоит "When thrown"/"Break into debugger".
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re: __try
От: Аноним  
Дата: 31.01.08 12:58
Оценка: +1 -1 :)))
Здравствуйте, Kingofastellarwar, Вы писали:

K>Есть такой код:

K> __try
K> {
K> Start(i);
K> }
K> __except(RecordExceptionInfo(GetExceptionInformation(), L"WinMain"))
K> {
K> }

K>он работал, а потом перестал работать т.е. не перехватывает исключение, а вызывает отдалдчик.

K>по каким причинам такое может быть? Компилируется с /EHsc.

__try — это по всей видимости объявленный где-то выше макрос, поэтому корни надо искать там
а что помешало воспользоваться стандартной обработкой исключений try..catch?

Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора?
Re[2]: __try
От: Kingofastellarwar Украина  
Дата: 31.01.08 13:05
Оценка:
Здравствуйте, Left2, Вы писали:

L>Есть подозрение что ты запускаешь приложение в режиме отладки из-под Visual Studio, а в окошке Debug/Exceptions у тебя для подобных исключений стоит "When thrown"/"Break into debugger".


ничего такого нет. пускал и в релизе, и в дебаге, и под и без отладчика.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[2]: __try
От: Kingofastellarwar Украина  
Дата: 31.01.08 13:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>__try — это по всей видимости объявленный где-то выше макрос, поэтому корни надо искать там \

никак нет

А>а что помешало воспользоваться стандартной обработкой исключений try..catch?

ну решил использовать то что по умолчанию.

А>Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора?

компилятор vc9 и ключ его соответственно. http://msdn2.microsoft.com/ru-ru/library/1deeycx5(en-us).aspx
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: __try
От: Left2 Украина  
Дата: 31.01.08 13:38
Оценка:
K>ничего такого нет. пускал и в релизе, и в дебаге, и под и без отладчика.

Тогда ставь брекпоинт в RecordExceptionInfo и смотри что там происходит
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[3]: __try
От: K13 http://akvis.com
Дата: 31.01.08 13:44
Оценка:
А>>Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора?
K>компилятор vc9 и ключ его соответственно. http://msdn2.microsoft.com/ru-ru/library/1deeycx5(en-us).aspx

/EHsc -- режим компиляции, при котором ловится только явный throw
если нужно ловить всё, используй /EHa
Re[4]: __try
От: remark Россия http://www.1024cores.net/
Дата: 31.01.08 14:23
Оценка:
Здравствуйте, K13, Вы писали:

А>>>Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора?

K>>компилятор vc9 и ключ его соответственно. http://msdn2.microsoft.com/ru-ru/library/1deeycx5(en-us).aspx

K13>/EHsc -- режим компиляции, при котором ловится только явный throw

K13>если нужно ловить всё, используй /EHa


Это верно только если ловить через try/catch.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: __try
От: remark Россия http://www.1024cores.net/
Дата: 31.01.08 14:28
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:


    __try
    {
        Start(i);
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
         RecordExceptionInfo(GetExceptionInformation(), L"WinMain");
    }



Я думаю, подразумевалось это. Но встроенный в мозг модуль обфускации не дал записать так.
RecordExceptionInfo() возможно возвращает TRUE/FALSE, имея в виду успешно/не успешно произошла запись отладочной информации. TRUE по счастливому стечению обстоятельств равен EXCEPTION_EXECUTE_HANDLER, FALSE — EXCEPTION_CONTINUE_SEARCH.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[4]: __try
От: Kingofastellarwar Украина  
Дата: 31.01.08 14:31
Оценка:
Здравствуйте, Left2, Вы писали:

K>>ничего такого нет. пускал и в релизе, и в дебаге, и под и без отладчика.


L>Тогда ставь брекпоинт в RecordExceptionInfo и смотри что там происходит


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

я сколько раз запускал, отладчик все время мне ошибку показывал в том месте где обращение по неправильному адресу.
и я думал что он в RecordExceptionInfo и не приходит вообще.
а на самом деле в RecordExceptionInfo происходила ошибка и он возвращал EXCEPTION_CONTINUE_SEARCH, который перехватывал уже отладчик и показыл на место где произошёл эксепшон. А я бряку в RecordExceptionInfo не додумался поставить.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[5]: __try
От: remark Россия http://www.1024cores.net/
Дата: 31.01.08 15:30
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>Здравствуйте, Left2, Вы писали:


K>>>ничего такого нет. пускал и в релизе, и в дебаге, и под и без отладчика.


L>>Тогда ставь брекпоинт в RecordExceptionInfo и смотри что там происходит


K>блин, я ламер, народ не ходите в продолжительные отпуска.


K>я сколько раз запускал, отладчик все время мне ошибку показывал в том месте где обращение по неправильному адресу.

K>и я думал что он в RecordExceptionInfo и не приходит вообще.
K>а на самом деле в RecordExceptionInfo происходила ошибка и он возвращал EXCEPTION_CONTINUE_SEARCH, который перехватывал уже отладчик и показыл на место где произошёл эксепшон. А я бряку в RecordExceptionInfo не додумался поставить.


http://gzip.rsdn.ru/forum/message/2819442.1.aspx
Автор: remark
Дата: 31.01.08

?




1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: __try
От: Кодт Россия  
Дата: 31.01.08 17:11
Оценка: +1 :)
Здравствуйте, <Аноним>, Вы писали:

А>__try — это по всей видимости объявленный где-то выше макрос, поэтому корни надо искать там




А>а что помешало воспользоваться стандартной обработкой исключений try..catch?


А>Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора?


Сразу видно — чистый незамутнённый линуксоид!
Любой виндузятник так или иначе столкнулся бы с компиляторами VC и структурными исключениями.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.