| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > OnInitDialog и механизм исключений |
| Автор: Albor 1.5.2009, 09:44 | ||
Имеется такой код в OnInitDialog:
при отладке программы механизм работает правильно, но в релизе - полностью игнорируется (в блок catch программа не попадает) и в случае, например отсутствия файла, происходит авария с предложением отправить сообщение об ошибке в MS (нафига только им это надо Что можете сказать по этому поводу? PS Только просьба - не критикуйте устаревший ODBC. |
| Автор: Alca 1.5.2009, 11:04 | ||
А так?
|
| Автор: Albor 1.5.2009, 14:06 |
В том то и дело, что не работает это именно в данной функции! Думаешь я так не пробовал? |
| Автор: Rififi 1.5.2009, 15:30 |
| попробуй использовать seh translator, может дело вообще не в c++ исключениях |
| Автор: Albor 1.5.2009, 20:01 |
Riffi, просветите пожалуйста, я не знаю что это такое. ---------------Добавлено--------------------------------------------- Кое что нашёл, правда всё на английском. Оказывается это довольно частое явление, и, насколько я понял, связано с оптимизацией, которую осуществляет компилятор. Но всё равно, если кто-то пояснит по-русски, буду благодарен. ----------------Ещё----------------------------- В общем, пока пришёл к выводу о том, что не следует производить какие-либо действия, способные вызвать исключение в функции OnInitDialog. Буду считать вопрос решённым, так как нашёл информацию к размышлению и требующую изучения и экспериментов. Спасибо откликнувшимся и неравнодушным! |
| Автор: Earnest 4.5.2009, 09:47 |
| Вообще-то странное поведение. Уж на исключения-то всегда можно положиться. Сколько живу... Кoд-то доступен? Попробуй пройти по шагам OpenEx (в дебаге, конечно) так проще проследить цепочку вызовов, чем по коду лазить. Посмотри, какое исключение и где возбуждается... Очень плохо, что перехватчик у тебя принимает копию объекта; лучше ссылку или указатель. Кстати, если это MFC, то MFC-исключения обычно возбуждаются по указателю... |
| Автор: Albor 4.5.2009, 21:10 | ||
| Earnest, там без разницы как я передаю объект исключения. Я "провоцирую" CDBException, изменяя имя подключаемого файла. Если вы обратили внимание, то в коде у меня закомментирован блок TRY/CATCH, который описывается в MSDN. Проходить в Debag-e нет смысла, потому что в этом режиме исключение ловится как положено (они как положено ловятся и в других функциях программы не зависимо от варианта компиляции), а вот в Release не хочет, причем я пробовал другие исключения (деление на ноль, конечно не лучший способ проверки, лучше бы было попробовать с нулевым указателем), результат тот же. Может это проблемы 6й студии, просто сейчас не хватает времени на эксперименты. Испытайте такой код. Вы будете удивлены. В 6й студии это срабатывает в Debug-е, а в 2008й не срабатывает вообще.
Я погуглил на счёт, просмотрел несколько статей, и понял, что не всё так гладко в этом "королевстве". В статьях (кстати упоминается 6я студия и CDBException) рекомендуются кое-какие способы решения таких проблем, но я сходу не "въехал" в смысл предлагаемого ( статьи на английском, а мне, чтобы разобрать что там написано, нужно потратить немало времени, будет время почитаю). |