crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Помогите разобраться с try ... catch
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
mva Дата 26.12.2012, 9:44
  Ну судя по размерам собираемого исполняемого файла в том и другом случае, с наименованиями сборок все нормально. Ладно, я пока забил на это, Просто в будущем конструкции try...catch буду отлаживать без отладчика.
Алексей1153 Дата 25.12.2012, 21:40
  как раз в дебаге должно нормально показываться, а в релизе может неожиданно перескакивать согласно оптимизированному коду

сдаётся мне, у тебя перепутаны названия сборок ))
mva Дата 25.12.2012, 14:41
  Своим вопросом Вы натолкнули меня на мысль попробовать работу в release-сборке. Там работает нормально. Похоже, что это отладчик не может корректно обрабатывать конструкции catch. Так ли это?
Алексей1153 Дата 25.12.2012, 12:28
  сборка - релиз или дебаг ?
mva Дата 25.12.2012, 12:17
  Доброго дня!

Может не сюда следовало бы поместить тему, но все же. Занялся подключением OpenOffice через UNO к своему приложению, написанному на Qt4. Споткнулся на непонятном поведении исключения при ошибке.

bool OOUNOReportEngine::open()
{
    bool connected = tryConnect();
    if (!connected)                 // Если сходу не удалось подключиться, то наверное сервер OpenOffice не запущен
    {
        ooProcess = new QProcess();
        ooProcess->start("soffice \"--accept=" + ooProcessCommand + "\"  --invisible");
        ooProcess->waitForStarted();
        connected = tryConnect();           // Попытаемся еще раз подключиться
    }
    if (connected)
    {
    ...
    }
    else
    {
        TApplication::exemplar()->showError(QObject::trUtf8("Не удалось запустить") + " Open Office");                   // выдадим сообщение об ошибке
    }
    return connected;
}


bool OOUNOReportEngine::tryConnect()
{
    bool result = true;

    OUString sConnectionString(OUString::createFromAscii(QString("uno:" + ooProcessCommand).toAscii()));
    Reference<XComponentContext> xComponentContext(::cppu::defaultBootstrap_InitialComponentContext());
    Reference<XMultiComponentFactory> xMultiComponentFactoryClient(xComponentContext->getServiceManager());
    xInterface = xMultiComponentFactoryClient->createInstanceWithContext(OUString("com.sun.star.bridge.UnoUrlResolver"), xComponentContext);
    Reference<XUnoUrlResolver> resolver(xInterface, UNO_QUERY);
    try
    {
        xInterface = Reference<XInterface>(resolver->resolve(sConnectionString ), UNO_QUERY);
    }
    catch (Exception& e)
    {
        qDebug() << QString().fromAscii(OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US).pData->buffer);
        result = false;
    }
       //    По идее, после обработки ошибки выполнение программы должно возобновиться с этого места, но вместо этого сразу происходит выход из функции
    if (result)
    {
    // Если ошибки не было, то продолжим
    ...
    }
    return result;
}


Вопрос такой: почему при возникновении ошибки и ее обработки оператором catch программа не переходит к следующему за catch оператору, а сразу вываливается из фунции tryConnect?
Прошу сильно не пинать, это практически моя первая программа на C++.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 20:04