Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OnInitDialog и механизм исключений, не срабатывает try/catch в Release 
V
    Опции темы
Albor
Дата 1.5.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Имеется такой код в OnInitDialog:
Код

CString connect("DBQ=db.mdb;DRIVER={Microsoft Access Driver (*.mdb)}");
        try//TRY
        {
            m_db.OpenEx(connect,CDatabase::noOdbcDialog);
        }
        catch/*CATCH*/(CDBException e)
        {
            AfxMessageBox(e.m_strError,MB_OK|MB_ICONERROR);
            return FALSE;
        }
//        END_CATCH

при отладке программы механизм работает правильно, но в релизе - полностью игнорируется (в блок catch программа не попадает) и в случае, например отсутствия файла, происходит авария с предложением отправить сообщение об ошибке в MS (нафига только им это надо  smile ).
Что можете сказать по этому поводу?
PS Только просьба - не критикуйте устаревший ODBC.
PM MAIL ICQ   Вверх
Alca
Дата 1.5.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



А так?
Код

BOOL bRes = FALSE;
CString connect("DBQ=db.mdb;DRIVER={Microsoft Access Driver (*.mdb)}");

try {
    m_db.OpenEx(connect,CDatabase::noOdbcDialog);
    bRes = TRUE;
} catch(...) {
    AfxMessageBox("e.m_strError",MB_OK|MB_ICONERROR);
    bRes = FALSE;
}

return bRes;


Это сообщение отредактировал(а) Alca - 1.5.2009, 11:04


--------------------
PM WWW ICQ Skype Jabber   Вверх
Albor
Дата 1.5.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Цитата(Alca @  1.5.2009,  11:04 Найти цитируемый пост)
А так?

В том то и дело, что не работает это именно в данной функции! Думаешь я так не пробовал?
PM MAIL ICQ   Вверх
Rififi
Дата 1.5.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 2
Всего: 36



попробуй использовать seh translator, может дело вообще не в c++ исключениях
PM MAIL   Вверх
Albor
Дата 1.5.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Цитата(Rififi @  1.5.2009,  15:30 Найти цитируемый пост)
попробуй использовать seh translator

Riffi, просветите пожалуйста, я не знаю что это такое. 
---------------Добавлено---------------------------------------------
Кое что нашёл, правда всё на английском. Оказывается это довольно частое явление, и, насколько я понял, связано с оптимизацией, которую осуществляет компилятор. Но всё равно, если кто-то пояснит по-русски, буду благодарен.
----------------Ещё-----------------------------
В общем, пока пришёл к выводу о том, что не следует производить какие-либо действия, способные вызвать исключение в функции OnInitDialog. Буду считать вопрос решённым, так как нашёл информацию к размышлению и требующую изучения и экспериментов. Спасибо откликнувшимся и неравнодушным!  

Это сообщение отредактировал(а) Albor - 2.5.2009, 20:56
PM MAIL ICQ   Вверх
Earnest
Дата 4.5.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Вообще-то странное поведение. Уж на исключения-то всегда можно положиться. Сколько живу...
Кoд-то доступен? Попробуй пройти по шагам OpenEx (в дебаге, конечно)  так проще проследить цепочку вызовов, чем по коду лазить. Посмотри, какое исключение и где возбуждается...
Очень плохо, что перехватчик у тебя принимает копию объекта; лучше ссылку или указатель. Кстати, если это MFC, то MFC-исключения обычно возбуждаются по указателю...



--------------------
...
PM   Вверх
Albor
Дата 4.5.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 7
Всего: 9



Earnest, там без разницы как я передаю объект исключения. Я "провоцирую" CDBException, изменяя имя подключаемого файла. Если вы обратили внимание, то в коде у меня закомментирован блок TRY/CATCH, который описывается в MSDN. Проходить в Debag-e нет смысла, потому что в этом режиме исключение ловится как положено (они как положено ловятся и в других функциях программы не зависимо от варианта компиляции), а вот в Release не хочет, причем я пробовал другие исключения (деление на ноль, конечно не лучший способ проверки, лучше бы было попробовать с нулевым указателем), результат тот же. Может это проблемы 6й студии, просто сейчас не хватает времени на эксперименты.     
Цитата(Earnest @  4.5.2009,  09:47 Найти цитируемый пост)
Уж на исключения-то всегда можно положиться.

Испытайте такой код. Вы будете удивлены. В 6й студии это срабатывает в Debug-е, а в 2008й не срабатывает вообще.
Код

try
    {
        int * pInt=0;
        *pInt=10;
    }
    catch(...)
    {
        MessageBox(_T("Error!"));
    }


Я погуглил на счёт, 
Цитата(Rififi @  1.5.2009,  15:30 Найти цитируемый пост)
seh translator

просмотрел несколько статей, и понял, что не всё так гладко в этом "королевстве". В статьях (кстати упоминается 6я студия и CDBException) рекомендуются кое-какие способы решения таких проблем, но я сходу не "въехал" в смысл предлагаемого ( статьи на английском, а мне, чтобы разобрать что там написано, нужно потратить немало времени, будет время почитаю). 


Это сообщение отредактировал(а) Albor - 5.5.2009, 06:28
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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