Russian Qt Forum

Qt => Общие вопросы => Тема начата: gigabyte от Март 11, 2010, 23:50



Название: Проблема с QDebug() при переходе с Qt 4.5.1 -> 4.6.0
Отправлено: gigabyte от Март 11, 2010, 23:50
Работал на 4.5.1
Написал вот это:
Код:
void fillPluginParameters()
{
    shared::params->insert("database",qVariantFromValue((QObject *)&shared::database));
    shared::params->insert("core",qVariantFromValue((QObject *)shared::Core));
    shared::params->insert("localdb",qVariantFromValue((QObject *)&shared::LocalDB));
    qDebug()<< shared::params->value("database");
    qDebug()<< shared::params->value("core");
    qDebug()<< shared::params->value("LocalDB");
}
Все работало прекрасно
Першел на 4.6.0 (скопмилилось нормально) но на строке
Код:
    qDebug()<< shared::params->value("database");
Вылетает по SIGSEGV
Отследил до кода:
Код:
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug dbg, const QVariant &v)
{
#ifndef Q_BROKEN_DEBUG_STREAM
    dbg.nospace() << "QVariant(" << v.typeName() << ", ";
    QVariant::handler->debugStream(dbg, v);
    dbg.nospace() << ')';
    return dbg.space();
#else
    qWarning("This compiler doesn't support streaming QVariant to QDebug");
    return dbg;
    Q_UNUSED(v);
#endif
}
Вылетаэт на
Код:
    QVariant::handler->debugStream(dbg, v); 

Собсно вопрос: Что делать и кто виноват?


Название: Re: Проблема с QDebug() при переходе с Qt 4.5.1 -> 4.6.0
Отправлено: whirlwind от Март 12, 2010, 19:06
я бы для начала
Код:
QString st  = shared::params->value("database");
qDebug()<< st

а то мало ли чего бывает...

с 4.5.2 на 4.6.0 переходил, ничего такого не было


Название: Re: Проблема с QDebug() при переходе с Qt 4.5.1 -> 4.6.0
Отправлено: Rcus от Март 12, 2010, 19:56
А в 4.5.2 что-то выводилось? По идее различие в том что QVariant::handler->streamDebug в 4.5.2 не обрабатывал QVariant::QObjectStar, поэтому ничего не должно было выводиться. В 4.6.0 добавили вывод через QDebug operator<<(QDebug, const QObject *); поэтому будет падать на невалидных указателях


Название: Re: Проблема с QDebug() при переходе с Qt 4.5.1 -> 4.6.0
Отправлено: gigabyte от Март 12, 2010, 20:42
В 4.5.1 выводилось вот что:
Код:
Debug: QVariant(QObject*, ) 


Название: Re: Проблема с QDebug() при переходе с Qt 4.5.1 -> 4.6.0
Отправлено: Rcus от Март 13, 2010, 20:47
Так ничто и есть :) А указатели то вообще валидные? Потому что даже при нулевых не должно падать.
UPD: Вот еще что подумал... А какой тип то у shared::database, shared::Core и shared::LocalDB, а то C-style касты что-то слегка тревожат.