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 г.
Есть подозрение что ты запускаешь приложение в режиме отладки из-под Visual Studio, а в окошке Debug/Exceptions у тебя для подобных исключений стоит "When thrown"/"Break into debugger".
Здравствуйте, Kingofastellarwar, Вы писали:
K>Есть такой код: K> __try K> { K> Start(i); K> } K> __except(RecordExceptionInfo(GetExceptionInformation(), L"WinMain")) K> { K> }
K>он работал, а потом перестал работать т.е. не перехватывает исключение, а вызывает отдалдчик. K>по каким причинам такое может быть? Компилируется с /EHsc.
__try — это по всей видимости объявленный где-то выше макрос, поэтому корни надо искать там
а что помешало воспользоваться стандартной обработкой исключений try..catch?
Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора?
Здравствуйте, Left2, Вы писали:
L>Есть подозрение что ты запускаешь приложение в режиме отладки из-под Visual Studio, а в окошке Debug/Exceptions у тебя для подобных исключений стоит "When thrown"/"Break into debugger".
ничего такого нет. пускал и в релизе, и в дебаге, и под и без отладчика.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Аноним, Вы писали:
А>__try — это по всей видимости объявленный где-то выше макрос, поэтому корни надо искать там \
никак нет
А>а что помешало воспользоваться стандартной обработкой исключений try..catch?
ну решил использовать то что по умолчанию.
А>Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора?
компилятор vc9 и ключ его соответственно. http://msdn2.microsoft.com/ru-ru/library/1deeycx5(en-us).aspx
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, K13, Вы писали:
А>>>Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора? K>>компилятор vc9 и ключ его соответственно. http://msdn2.microsoft.com/ru-ru/library/1deeycx5(en-us).aspx
K13>/EHsc -- режим компиляции, при котором ловится только явный throw K13>если нужно ловить всё, используй /EHa
Я думаю, подразумевалось это. Но встроенный в мозг модуль обфускации не дал записать так.
RecordExceptionInfo() возможно возвращает TRUE/FALSE, имея в виду успешно/не успешно произошла запись отладочной информации. TRUE по счастливому стечению обстоятельств равен EXCEPTION_EXECUTE_HANDLER, FALSE — EXCEPTION_CONTINUE_SEARCH.
Здравствуйте, Left2, Вы писали:
K>>ничего такого нет. пускал и в релизе, и в дебаге, и под и без отладчика.
L>Тогда ставь брекпоинт в RecordExceptionInfo и смотри что там происходит
блин, я ламер, народ не ходите в продолжительные отпуска.
я сколько раз запускал, отладчик все время мне ошибку показывал в том месте где обращение по неправильному адресу.
и я думал что он в RecordExceptionInfo и не приходит вообще.
а на самом деле в RecordExceptionInfo происходила ошибка и он возвращал EXCEPTION_CONTINUE_SEARCH, который перехватывал уже отладчик и показыл на место где произошёл эксепшон. А я бряку в RecordExceptionInfo не додумался поставить.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Kingofastellarwar, Вы писали:
K>Здравствуйте, Left2, Вы писали:
K>>>ничего такого нет. пускал и в релизе, и в дебаге, и под и без отладчика.
L>>Тогда ставь брекпоинт в RecordExceptionInfo и смотри что там происходит
K>блин, я ламер, народ не ходите в продолжительные отпуска.
K>я сколько раз запускал, отладчик все время мне ошибку показывал в том месте где обращение по неправильному адресу. K>и я думал что он в RecordExceptionInfo и не приходит вообще. K>а на самом деле в RecordExceptionInfo происходила ошибка и он возвращал EXCEPTION_CONTINUE_SEARCH, который перехватывал уже отладчик и показыл на место где произошёл эксепшон. А я бряку в RecordExceptionInfo не додумался поставить.
Здравствуйте, <Аноним>, Вы писали:
А>__try — это по всей видимости объявленный где-то выше макрос, поэтому корни надо искать там
А>а что помешало воспользоваться стандартной обработкой исключений try..catch?
А>Что такое "Компилируется с /EHsc" не понятно, подозреваю, что какой-то параметр неуказанного тобой компилятора?
Сразу видно — чистый незамутнённый линуксоид!
Любой виндузятник так или иначе столкнулся бы с компиляторами VC и структурными исключениями.