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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: помощь по багтрекеру Qt  (Прочитано 8901 раз)
EhTemka
Гость
« : Апрель 01, 2009, 21:33 »

Всем привет!

Есть такой таск

http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=247708

От себя добавлю что краш возникает только при РЕЛИЗНОЙ сборке под ВИНДОЙ на MSVC from Visial Studio 2005.
(Я им тоже писал письмо, по этому поводу)


Инженеры Qt говорят, что это баг компилятора и ничего исправлять они не собирются. Ситуация для меня весьма неприятная.
Так как я не коммерческий клиент, то вижу урезанную информацию по таску (по крайней мере я так думаю). Только дескришен и история.

Собственно я хотел попросить людей, у которых есть коммерческая лицензия, чтобы они посмотрели этот таск, и рассказали что там еще написано. Возможно там написано, что это за баг и т.д.

Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Апрель 02, 2009, 07:39 »

я не думаю, что там ещё что-то написано.
Записан

Юра.
shadone
Гость
« Ответ #2 : Апрель 02, 2009, 11:54 »

там больше ничего нет. есть пара ссылок на похожие проблемы из которых видно что скорее всего это проблема оптимизации в компиляторе (например добавление пары qDebug в QDataStream &QDataStream::operator<<(qint32 i) исправляет проблему).
Записан
EhTemka
Гость
« Ответ #3 : Апрель 02, 2009, 14:36 »

Ясно, спасибо. Но всё же хотелось бы узнать про этот баг побольше. Может есть патч какой-нибудь, и вообще знают ли о нем в микрософте...

To ddenis :
Напиши эти ссылки тут, пожалуйста. Хотелось бы на них посмотреть 
Записан
shadone
Гость
« Ответ #4 : Апрель 02, 2009, 15:01 »

Ясно, спасибо. Но всё же хотелось бы узнать про этот баг побольше. Может есть патч какой-нибудь, и вообще знают ли о нем в микрософте...

To ddenis :
Напиши эти ссылки тут, пожалуйста. Хотелось бы на них посмотреть 
ссылок у меня нет. Могу только добавить что добавление отладочной печати в функцию QDataStream &QDataStream::operator<<(qint32 i) и пересборка Qt в режиме release исправляет проблему, что подтверждает проблему с компилятором.

Код:
QDataStream &QDataStream::operator<<(qint32 i)
{
    CHECK_STREAM_PRECOND(*this)
    if (noswap) {
        dev->write((char *)&i, sizeof(qint32));
    } else {                                        // swap bytes
        register uchar *p = (uchar *)(&i);
        char b[4];
        qDebug() << "1:" <<  p << "/" << *p << ", "<< b << ", " << b[0] << ", " << b[1] << ", "<< b[2] << ", "<< b[3];
        b[3] = *p++;
        qDebug() << "2:" <<  p << "/" << *p << ", "<< b << ", " << b[0] << ", " << b[1] << ", "<< b[2] << ", "<< b[3];
        b[2] = *p++;
        qDebug() << "3:" <<  p << "/" << *p << ", "<< b << ", " << b[0] << ", " << b[1] << ", "<< b[2] << ", "<< b[3];
        b[1] = *p++;
        qDebug() << "4:" <<  p << "/" << *p << ", "<< b << ", " << b[0] << ", " << b[1] << ", "<< b[2] << ", "<< b[3];
        b[0] = *p;
        qDebug() << "5:" <<  p << "/" << *p << ", "<< b << ", " << b[0] << ", " << b[1] << ", "<< b[2] << ", "<< b[3];
        dev->write(b, 4);
    }
    return *this;
}

Знают ли в майкрософте не в курсе - если у вас проблема проявляется и есть лицензия на Visual Studio - напиши им.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Апрель 02, 2009, 15:15 »

А если попробывать не Visual Studio 2005, а Visual Studio 2008? Или установить сервис пак для Visual Studio 2005?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
EhTemka
Гость
« Ответ #6 : Апрель 02, 2009, 17:16 »

To ddenis:
Спасибо, попробуем пока этот способ.

Лицензии, каюсь, на Visual Studio нет.

To pastor:
2008 студии пока нет, но попробую поискать более новый компилятор.
Записан
EhTemka
Гость
« Ответ #7 : Апрель 04, 2009, 20:30 »

Кому интересно, переход на 2008-ю студию не помог.
Так что воспользовался советом ddenisа. 
Вроде не падает  Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Апрель 04, 2009, 20:44 »

EhTemka, мож выложить минимальный код для воспроизведения? (хочу у себя попробывать)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
crackedmind
Гость
« Ответ #9 : Апрель 04, 2009, 20:46 »

Угу, мне тоже интересно. А то как раз сериализацию на основе QDataStream делаю. Не хотелось бы потратить время на нахождение такого бага Улыбающийся
Записан
EhTemka
Гость
« Ответ #10 : Апрель 04, 2009, 20:52 »

На счет сереализации не знаю..

Но вот такой код с доквиджетами падает у меня при релизной сборке стабильно

Код
C++ (Qt)
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
#include <QtGui/QDockWidget>
 
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
 
QMainWindow *testDocksClass = new QMainWindow();
 
QWidget *centralWidget;
QDockWidget *dockWidget_2;
QWidget *dockWidgetContents_2;
QDockWidget *dockWidget;
QWidget *dockWidgetContents;
QDockWidget *dockWidget_3;
QWidget *dockWidgetContents_3;
 
centralWidget = new QWidget(testDocksClass);
 
testDocksClass->setCentralWidget(centralWidget);
 
dockWidget = new QDockWidget(testDocksClass);
dockWidgetContents = new QWidget();
dockWidget->setWidget(dockWidgetContents);
 
testDocksClass->addDockWidget(static_cast<Qt::DockWidgetArea>(1), dockWidget);
 
dockWidget_2 = new QDockWidget(testDocksClass);
dockWidgetContents_2 = new QWidget();
dockWidget_2->setWidget(dockWidgetContents_2);
 
testDocksClass->addDockWidget(static_cast<Qt::DockWidgetArea>(2), dockWidget_2);
 
dockWidget_3 = new QDockWidget(testDocksClass);
dockWidgetContents_3 = new QWidget();
dockWidget_3->setWidget(dockWidgetContents_3);
 
testDocksClass->addDockWidget(static_cast<Qt::DockWidgetArea>(1), dockWidget_3);
 
QByteArray arr = testDocksClass->saveState();
 
testDocksClass->restoreState(arr); // CRASH INTO RELEASE
 
testDocksClass->show();
 
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
return a.exec();
}
 
Записан
crackedmind
Гость
« Ответ #11 : Апрель 04, 2009, 21:33 »

Ага, щас проверю. А Visual C++ 2008 c sp1?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #12 : Апрель 04, 2009, 21:43 »

Проверил, краша нет:

MSVS2008 + SP1, Qt 4.1.5, Qt 4.2.3, Qt 4.3.5, Qt 4.4.3, Qt 4.5.0
Windows XP x64

Цитировать
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\nmake.exe"

Microsoft (R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.

Цитировать
cl.exe
Microsoft (R) C/C++ Optimizing Compiler Version 15.00.21022.08 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
EhTemka
Гость
« Ответ #13 : Апрель 06, 2009, 14:52 »

Код:
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin

Microsoft (R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.

Код:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Visual C++ 2008 без сервиспака.
Добавлю, что куте скомпилино статически и система х32.
Возможно 64-х битный компилятор и не страдает подобной ерундой.
Если не трудно, можешь проверить скомпилить 32-х битным?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #14 : Апрель 06, 2009, 15:46 »

Если не трудно, можешь проверить скомпилить 32-х битным?

К сожалению немогу, у меня все сборки Qt x64
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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