Пишу программу. Использует Qt и OpenGL через qt. И вот какая хрень образовалась.
На НВИДИА программа отлично работает, без ошибок. На АТИ, Интел, - нет. Виснет и вылетет. Но:
1) Вылетают те места, которые никак не связаны с графикой - построение отчётов, сохранение в файл и т.д.
2) Одно время висла ещё до всякой инициализации OpenGL, когда о нём ещё и речи нет.
3) Глючащие места абсолютно правильны
3) При компиляции с разными выравниваниями и библиотеками - места ошибок не меняются, так что непохоже на кривой указатель или выход за пределы массива.
5) Статический анализатор не ругается ни на что, кроме утечек памяти...
Примечание:
Конечно делал. Вот каноничный пример:
Astron.exe!QWidget::testAttribute(Qt::WidgetAttribute attribute=WA_WState_Hidden) Line 1025 + 0x10 bytes C++
Astron.exe!QWidget::setAttribute(Qt::WidgetAttribute attribute=WA_WState_Hidden, bool on=true) Line 10238 + 0xc bytes C++
Astron.exe!QWidgetPrivate::init(QWidget * parentWidget=0x00000000, QFlags<enum Qt::WindowType> f={...}) Line 1173 C++
Astron.exe!QWidget::QWidget(QWidgetPrivate & dd={...}, QWidget * parent=0x00000000, QFlags<enum Qt::WindowType> f={...}) Line 1040 + 0x1e bytes C++
> Astron.exe!QFrame::QFrame(QFramePrivate & dd={...}, QWidget * parent=0x00000000, QFlags<enum Qt::WindowType> f={...}) Line 218 + 0x47 bytes C++
Astron.exe!QAbstractScrollArea::QAbstractScrollArea(QAbstractScrollAreaPrivate & dd={...}, QWidget * parent=0x00000000) Line 488 + 0x4c bytes C++
Astron.exe!QTextEdit::QTextEdit(QWidget * parent=0x00000000) Line 602 + 0x76 bytes C++
Astron.exe!LogWidget::LogWidget() Line 24 + 0x44 bytes C++
Astron.exe!main(int argc=1, char * * argv=0x02a179b0) Line 130 + 0x28 bytes C++
Astron.exe!WinMain(HINSTANCE__ * instance=0x00400000, HINSTANCE__ * prevInstance=0x00000000, char * __formal=0x002232ed, int cmdShow=1) Line 131 + 0x12 bytes C++
Astron.exe!__tmainCRTStartup() Line 574 + 0x35 bytes C
Astron.exe!WinMainCRTStartup() Line 399 C
kernel32.dll!76dd1194()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!7748b3f5()
ntdll.dll!7748b3c8()
Astron.exe!qt_UnicodeToTSCII(unsigned short u1=0, unsigned short u2=58763, unsigned short
По стекам при падениях видно, что глючит что-либо в библиотеке Qt или в системных. Точо те же действия, написанные заново, не глючат. Например, указанный в этом стеке QTextEdit создаётся в самом начале программы, после QApplication и до всего остального. И вот нате - полёт....
u3=12) Line 482 + 0xa bytes C++
000d8964()
Примечание:
Извините, глючит ВиО с новой оперы, менять надо будет...
Примечание:
LogWidget наследует QTextEdit без изменений, только добавляет пару методов.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.