Russian Qt Forum
Ноябрь 27, 2024, 00:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с QDebug() при переходе с Qt 4.5.1 -> 4.6.0  (Прочитано 3996 раз)
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); 

Собсно вопрос: Что делать и кто виноват?
Записан
whirlwind
Гость
« Ответ #1 : Март 12, 2010, 19:06 »

я бы для начала
Код:
QString st  = shared::params->value("database");
qDebug()<< st

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

с 4.5.2 на 4.6.0 переходил, ничего такого не было
Записан
Rcus
Гость
« Ответ #2 : Март 12, 2010, 19:56 »

А в 4.5.2 что-то выводилось? По идее различие в том что QVariant::handler->streamDebug в 4.5.2 не обрабатывал QVariant::QObjectStar, поэтому ничего не должно было выводиться. В 4.6.0 добавили вывод через QDebug operator<<(QDebug, const QObject *); поэтому будет падать на невалидных указателях
Записан
gigabyte
Гость
« Ответ #3 : Март 12, 2010, 20:42 »

В 4.5.1 выводилось вот что:
Код:
Debug: QVariant(QObject*, ) 
Записан
Rcus
Гость
« Ответ #4 : Март 13, 2010, 20:47 »

Так ничто и есть Улыбающийся А указатели то вообще валидные? Потому что даже при нулевых не должно падать.
UPD: Вот еще что подумал... А какой тип то у shared::database, shared::Core и shared::LocalDB, а то C-style касты что-то слегка тревожат.
« Последнее редактирование: Март 13, 2010, 20:50 от Rcus » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.124 секунд. Запросов: 20.