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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: рандомные SIGSEGV в QT в разных местах...  (Прочитано 9421 раз)
vulko
Гость
« : Апрель 18, 2014, 10:24 »

Люди добрые, помогите. Чем больше я  работаю с QT, тем больше понимаю какая это кривая поделка коленочной сборки слепых китайских пенсионеров...

Постоянно валятся SIGSEGV, то при десериализации из потока (qdatastream::operator>> после пары вызовов умирает на ~QObject!!!).

Теперь вот ещё один SIGSEGV вылез, на getter функции которая возвращает даже не указатель! нет! просто float!

Все происходит в основном потоке!

КАК??? КАКОГО ХУ... ХРЕНА!!! КТО ПРИДУМАЛ ЭТО КРИВОЕ QT?Непонимающий

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

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 18, 2014, 10:31 »

Прогони свою поделку хотя бы под valgrind и убедишься, что проблема совсем не в Qt.
К тому же, какое отношение приведённый класс имеет к Qt Непонимающий
Коли здесь падает, значит либо this левый, либо стек убил, либо кучу.
Записан

Qt 5.11/4.8.7 (X11/Win)
OKTA
Гость
« Ответ #2 : Апрель 18, 2014, 10:55 »

если вы работаете с QT, то проблема точно не в Qt  Смеющийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Апрель 18, 2014, 11:15 »

Выложи минимальный проект с этой проблемой, разберёмся кто слепой пенсионер.
Записан
vulko
Гость
« Ответ #4 : Апрель 18, 2014, 11:20 »

Прогони свою поделку хотя бы под valgrind и убедишься, что проблема совсем не в Qt.
К тому же, какое отношение приведённый класс имеет к Qt Непонимающий
Коли здесь падает, значит либо this левый, либо стек убил, либо кучу.

интересно, и как же this получился левый, когда экземпляр этого класса живет в singleton'е и всего один на всё приложение?

кучу и стэк убил... всяко Улыбающийся я же постоянно беру левые указатели, рандомное смещение и начинаю кораптить память!)))

Ещё ни один framework там мне мозги не делал...

valgrind попробую...

может ли быть проблема в том что все это происходит под виртуалкой?

Выложи минимальный проект с этой проблемой, разберёмся кто слепой пенсионер.
минимальный проект врядли получится выложить, он уже сильно большой стал.
Записан
OKTA
Гость
« Ответ #5 : Апрель 18, 2014, 11:22 »

У меня тоже такие есть подозрения по поводу виртуалки - проект ведет себя совсем неосмысленно и непредсказуемо. Даже не то, что совсем, а абсолютно непредсказуемо)) По какой ОС пробуешь?
Записан
vulko
Гость
« Ответ #6 : Апрель 18, 2014, 12:41 »

У меня тоже такие есть подозрения по поводу виртуалки - проект ведет себя совсем неосмысленно и непредсказуемо. Даже не то, что совсем, а абсолютно непредсказуемо)) По какой ОС пробуешь?

астра линух. дебианоподобное.
Записан
OKTA
Гость
« Ответ #7 : Апрель 18, 2014, 12:46 »

Совпадение  Смеющийся Мне тоже надо запустить на астра-линуксе свою прогу  Смеющийся
Но пока тестирую под убунтой! Но все идет к тому, что виновата именно виртуалка =(
Записан
vulko
Гость
« Ответ #8 : Апрель 21, 2014, 09:59 »

Совпадение  Смеющийся Мне тоже надо запустить на астра-линуксе свою прогу  Смеющийся
Но пока тестирую под убунтой! Но все идет к тому, что виновата именно виртуалка =(

поставил линух на компутер, все равно та же история...

падает в нескольких местах. бывает на десериализации qdatastream >> падает с sigsegv... и ещё в нескольких местах.

может в моей версии g++ динамическое выделение памяти под структуру не работает? надо через malloc может выделять?


прогнал memcheck'ом, выявилось несколько ошибок.
одна из них вообще внутри Qt GL wrapper'а:
Код:
==9713== Invalid read of size 1
==9713==    at 0x4C2A004: strcmp (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9713==    by 0x9ED6EEF: ??? (in /usr/lib/x86_64-linux-gnu/libglapi.so.0.0.0)
==9713==    by 0x9ED6DDC: _glapi_get_proc_address (in /usr/lib/x86_64-linux-gnu/libglapi.so.0.0.0)
==9713==    by 0x6B192E8: glXGetProcAddress (in /usr/lib/x86_64-linux-gnu/libGL.so.1.2)
==9713==    by 0x53CA006: QGLContext::getProcAddress(QString const&) const (in /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4.8.3)
==9713==    by 0x5368D53: ??? (in /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4.8.3)
==9713==    by 0x536B1DA: qt_resolve_version_2_0_functions(QGLContext*) (in /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4.8.3)
==9713==    by 0x53A5B58: QGL2PaintEngineEx::begin(QPaintDevice*) (in /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4.8.3)
==9713==    by 0x594F597: QPainter::begin(QPaintDevice*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x594FFF7: QPainter::QPainter(QPaintDevice*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x5E163C3: QGraphicsView::paintEvent(QPaintEvent*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x584FA91: QWidget::event(QEvent*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==  Address 0x13e73dfa is 26 bytes inside a block of size 54 free'd
==9713==    at 0x4C27D4E: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9713==    by 0x53CA024: QGLContext::getProcAddress(QString const&) const (in /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4.8.3)
==9713==    by 0x5368D05: ??? (in /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4.8.3)
==9713==    by 0x536B1DA: qt_resolve_version_2_0_functions(QGLContext*) (in /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4.8.3)
==9713==    by 0x53A5B58: QGL2PaintEngineEx::begin(QPaintDevice*) (in /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4.8.3)
==9713==    by 0x594F597: QPainter::begin(QPaintDevice*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x594FFF7: QPainter::QPainter(QPaintDevice*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x5E163C3: QGraphicsView::paintEvent(QPaintEvent*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x584FA91: QWidget::event(QEvent*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x5BFFDF5: QFrame::event(QEvent*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x5E17C9A: QGraphicsView::viewportEvent(QEvent*) (in /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.3)
==9713==    by 0x67A1825: QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.3)


Также при создании VBO ругается на invalid read... хотя все буферы и размеры при создании и записи в GPU RAM верны.

Код:
==9713== Invalid read of size 4
==9713==    at 0x124256F3: ???
==9713==    by 0x125A1A57: ???
==9713==    by 0x125ADDDF: ???
==9713==    by 0x125A154F: ???
==9713==    by 0x7FEFFE40F: ???
==9713==  Address 0x1339f0e8 is 8 bytes after a block of size 12,896 alloc'd
==9713==    at 0x4C270FE: memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9713==    by 0x4C271A7: posix_memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9713==    by 0xF3983B9: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==9713==    by 0xF531D35: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==9713==    by 0xF4F612A: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==9713==    by 0x415A89: oglDrawHelper::fillGridVertexBuf() (gldrawhelper.cpp:157)
==9713==    by 0x415161: oglDrawHelper::oglDrawHelper() (gldrawhelper.cpp:34)
==9713==    by 0x40E0F1: MainUIView::MainUIView(QObject*) (mainuiview.cpp:51)
==9713==    by 0x410FC1: UiController::UiController() (uicontroller.cpp:12)
==9713==    by 0x40B84E: CfgManager::InitSettings() (cfgmanager.cpp:14)
==9713==    by 0x40B5E3: main (main.cpp:8)
==9713==
==9713== Invalid read of size 4
==9713==    at 0x124256FF: ???
==9713==    by 0x125A1A57: ???
==9713==    by 0x125ADDDF: ???
==9713==    by 0x125A154F: ???
==9713==    by 0x7FEFFE40F: ???
==9713==  Address 0x1339f0ec is 12 bytes after a block of size 12,896 alloc'd
==9713==    at 0x4C270FE: memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9713==    by 0x4C271A7: posix_memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9713==    by 0xF3983B9: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==9713==    by 0xF531D35: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==9713==    by 0xF4F612A: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==9713==    by 0x415A89: oglDrawHelper::fillGridVertexBuf() (gldrawhelper.cpp:157)
==9713==    by 0x415161: oglDrawHelper::oglDrawHelper() (gldrawhelper.cpp:34)
==9713==    by 0x40E0F1: MainUIView::MainUIView(QObject*) (mainuiview.cpp:51)
==9713==    by 0x410FC1: UiController::UiController() (uicontroller.cpp:12)
==9713==    by 0x40B84E: CfgManager::InitSettings() (cfgmanager.cpp:14)
==9713==    by 0x40B5E3: main (main.cpp:8)
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #9 : Апрель 21, 2014, 10:24 »

Ну не видя вашего кода можно только гадать.

У нас, например, недавно программа падала в ~QString().
После довольно долгих поисков наши #pragma pack (push, 1) без парного #pragma pack (pop).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Апрель 21, 2014, 10:29 »

может в моей версии g++ динамическое выделение памяти под структуру не работает? надо через malloc может выделять?
Интересно, что это такое и почему оно вообще должно работать?
Записан

Qt 5.11/4.8.7 (X11/Win)
vulko
Гость
« Ответ #11 : Апрель 21, 2014, 10:44 »

может в моей версии g++ динамическое выделение памяти под структуру не работает? надо через malloc может выделять?
Интересно, что это такое и почему оно вообще должно работать?

имеется ввиду с помощью оператора new. сейчас заменил на malloc, посмотрим, вернуться ли крэши на операторе qdatastream >>...


Ну не видя вашего кода можно только гадать.

У нас, например, недавно программа падала в ~QString().
После довольно долгих поисков наши #pragma pack (push, 1) без парного #pragma pack (pop).

Да пожалуйста.

Вот на этот кусок ругается valgrind, очевидно после вызова glBufferDataARB.

Причину invalid read кроме как в кривости mesa или драйвера не вижу.

Код:
void oglDrawHelper::fillGridVertexBuf() {
    // init vertices array
    gridVertexBufSize = ( NUM_CIRCLE_SEG * CfgManager::MAP_NUM_CIRCLES + CfgManager::MAP_NUM_RAYS * 2 ) * 2;
    gridVertexBuf = new GLfloat[gridVertexBufSize];

... заполнение буфера

    // create, bind VBO and copy buffer
    glGenBuffersARB(1, &radialGridVertexBufID);
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, gridVertexBufID);
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, gridVertexBufSize * sizeof(GLfloat), gridVertexBuf, GL_STATIC_DRAW_ARB);
    // free unused memory
    delete[] radialGridVertexBuf;
}
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Апрель 21, 2014, 10:56 »

имеется ввиду с помощью оператора new. сейчас заменил на malloc, посмотрим, вернуться ли крэши на операторе qdatastream >>...
Навряд ли, т.к. не перегруженный new именно malloc использует.

Цитировать
Причину invalid read кроме как в кривости mesa или драйвера не вижу.
А вот это вполне может быть. Версия mesa точно соответствует версии драйвера и его поставщику?
Версию используемого драйвера смотри в X логе (например, в /var/log/Xorg.0.log).
« Последнее редактирование: Апрель 21, 2014, 11:03 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
OKTA
Гость
« Ответ #13 : Апрель 21, 2014, 10:59 »

У меня тоже падает на new внутри библиотеки  Непонимающий
Записан
vulko
Гость
« Ответ #14 : Апрель 21, 2014, 12:20 »

Навряд ли, т.к. не перегруженный new именно malloc использует.

Да, действительно malloc ситуацию не решил. Кстати тупанул я что-то, qdatastream::>> отваливается с sigabrt во время вызова
return *this >> reinterpret_cast<qint32&>(i);

А вот sigsegv вылетает на eventloop.exec() в другом потоке... тоже хрень какая-то...

А вот это вполне может быть. Версия mesa точно соответствует версии драйвера и его поставщику?
Версию используемого драйвера смотри в X логе (например, в /var/log/Xorg.0.log).

пробовал ставить последнюю месу и последний intel hd драйвер, после этого opengl я больше не видел)
попробовал обновиться из репозитория - месу и драйвер, opengl сошел с ума.

то что есть:
Код:
[    22.523] (II) Loader magic: 0x7f7805689b00
[    22.523] (II) Module ABI versions:
[    22.523] X.Org ANSI C Emulation: 0.4
[    22.523] X.Org Video Driver: 12.0
[    22.523] X.Org XInput driver : 16.0
[    22.523] X.Org Server Extension : 6.0

...

[    22.552] (II) Loading extension MIT-SCREEN-SAVER
[    22.552] (II) Loading extension XFree86-VidModeExtension
[    22.552] (II) Loading extension XFree86-DGA
[    22.552] (II) Loading extension DPMS
[    22.552] (II) Loading extension XVideo
[    22.552] (II) Loading extension XVideo-MotionCompensation
[    22.552] (II) Loading extension X-Resource
[    22.552] (II) LoadModule: "dbe"
[    22.552] (II) Loading /usr/lib/xorg/modules/extensions/libdbe.so
[    22.553] (II) Module dbe: vendor="X.Org Foundation"
[    22.553] compiled for 1.12.3, module version = 1.0.0
[    22.553] Module class: X.Org Server Extension
[    22.553] ABI class: X.Org Server Extension, version 6.0
[    22.553] (II) Loading extension DOUBLE-BUFFER
[    22.553] (II) LoadModule: "glx"
[    22.553] (II) Loading /usr/lib/xorg/modules/extensions/libglx.so
[    22.569] (II) Module glx: vendor="X.Org Foundation"
[    22.569] compiled for 1.12.3, module version = 1.0.0
[    22.569] ABI class: X.Org Server Extension, version 6.0
[    22.569] (==) AIGLX enabled
[    22.570] (II) Loading extension GLX
[    22.570] (II) LoadModule: "record"
[    22.570] (II) Loading /usr/lib/xorg/modules/extensions/librecord.so
[    22.570] (II) Module record: vendor="X.Org Foundation"
[    22.570] compiled for 1.12.3, module version = 1.13.0
[    22.570] Module class: X.Org Server Extension
[    22.570] ABI class: X.Org Server Extension, version 6.0
[    22.570] (II) Loading extension RECORD
[    22.570] (II) LoadModule: "dri"
[    22.571] (II) Loading /usr/lib/xorg/modules/extensions/libdri.so
[    22.578] (II) Module dri: vendor="X.Org Foundation"
[    22.578] compiled for 1.12.3, module version = 1.0.0
[    22.578] ABI class: X.Org Server Extension, version 6.0
[    22.578] (II) Loading extension XFree86-DRI
[    22.578] (II) LoadModule: "dri2"
[    22.578] (II) Loading /usr/lib/xorg/modules/extensions/libdri2.so
[    22.587] (II) Module dri2: vendor="X.Org Foundation"
[    22.587] compiled for 1.12.3, module version = 1.2.0
[    22.587] ABI class: X.Org Server Extension, version 6.0
[    22.587] (II) Loading extension DRI2
[    22.587] (==) Matched vmware as autoconfigured driver 0
[    22.587] (==) Matched vesa as autoconfigured driver 1
[    22.587] (==) Matched fbdev as autoconfigured driver 2
[    22.587] (==) Assigned the driver to the xf86ConfigLayout
[    22.587] (II) LoadModule: "vmware"
[    22.683] (II) Loading /usr/lib/xorg/modules/drivers/vmware_drv.so
[    22.752] (II) Module vmware: vendor="X.Org Foundation"
[    22.752] compiled for 1.12.3, module version = 12.0.2
[    22.752] Module class: X.Org Video Driver
[    22.752] ABI class: X.Org Video Driver, version 12.0
[    22.752] (II) LoadModule: "vesa"
[    22.753] (II) Loading /usr/lib/xorg/modules/drivers/vesa_drv.so
[    22.791] (II) Module vesa: vendor="X.Org Foundation"
[    22.791] compiled for 1.12.3, module version = 2.3.1
[    22.791] Module class: X.Org Video Driver
[    22.791] ABI class: X.Org Video Driver, version 12.0
[    22.791] (II) LoadModule: "fbdev"
[    22.791] (II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
[    22.798] (II) Module fbdev: vendor="X.Org Foundation"
[    22.798] compiled for 1.12.3, module version = 0.4.2
[    22.798] ABI class: X.Org Video Driver, version 12.0
[    22.798] (II) vmware: driver for VMware SVGA: vmware0405, vmware0710
[    22.798] (II) VESA: driver for VESA chipsets: vesa
[    22.798] (II) FBDEV: driver for framebuffer: fbdev
[    22.798] (++) using VT number 8
[    22.822] (II) LoadModule: "fbdevhw"
[    22.822] (II) Loading /usr/lib/xorg/modules/libfbdevhw.so
[    22.847] (II) Module fbdevhw: vendor="X.Org Foundation"
[    22.847] compiled for 1.12.3, module version = 0.0.2
[    22.847] ABI class: X.Org Video Driver, version 12.0
[    22.847] (EE) open /dev/fb0: No such file or directory
[    22.847] (II) vmware(0): Driver was compiled without KMS- and 3D support.
[    22.847] (WW) vmware(0): Disabling 3D support.
[    22.847] (WW) vmware(0): Disabling Render Acceleration.
[    22.847] (WW) vmware(0): Disabling RandR12+ support.
[    22.847] (--) vmware(0): VMware SVGA regs at (0x1070, 0x1071)
[    22.847] (II) Loading sub module "vgahw"
[    22.847] (II) LoadModule: "vgahw"
[    22.847] (II) Loading /usr/lib/xorg/modules/libvgahw.so
[    22.875] (II) Module vgahw: vendor="X.Org Foundation"
[    22.875] compiled for 1.12.3, module version = 0.1.0
[    22.875] ABI class: X.Org Video Driver, version 12.0
[    22.912] (--) vmware(0): caps:  0x01FF83E2
[    22.912] (--) vmware(0): depth: 24
[    22.912] (--) vmware(0): bpp:   32
[    22.912] (--) vmware(0): vram:  33554432
[    22.912] (--) vmware(0): pbase: 0xe8000000
[    22.912] (--) vmware(0): mwidt: 3840
[    22.912] (--) vmware(0): mheig: 1920

....

[    22.970] (--) Depth 24 pixmap format is 32 bpp
[    22.971] (II) vmware(0): Initialized VMWARE_CTRL extension version 0.2
[    22.971] (II) vmware(0): Initialized VMware Xinerama extension.
[    22.971] (II) vmware(0): vgaHWGetIOBase: hwp->IOBase is 0x03d0
[    23.259] (==) vmware(0): Backing store disabled
[    23.259] (==) vmware(0): Silken mouse enabled
[    23.260] (II) vmware(0): Initialized VMware Xv extension successfully.
[    23.260] (==) RandR enabled
[    23.260] (II) Initializing built-in extension Generic Event Extension
[    23.260] (II) Initializing built-in extension SHAPE
[    23.260] (II) Initializing built-in extension MIT-SHM
[    23.260] (II) Initializing built-in extension XInputExtension
[    23.260] (II) Initializing built-in extension XTEST
[    23.260] (II) Initializing built-in extension BIG-REQUESTS
[    23.260] (II) Initializing built-in extension SYNC
[    23.260] (II) Initializing built-in extension XKEYBOARD
[    23.260] (II) Initializing built-in extension XC-MISC
[    23.260] (II) Initializing built-in extension SECURITY
[    23.260] (II) Initializing built-in extension XINERAMA
[    23.260] (II) Initializing built-in extension XFIXES
[    23.260] (II) Initializing built-in extension RENDER
[    23.260] (II) Initializing built-in extension RANDR
[    23.260] (II) Initializing built-in extension COMPOSITE
[    23.260] (II) Initializing built-in extension DAMAGE
[    23.275] (II) AIGLX: Screen 0 is not DRI2 capable
[    23.275] (II) AIGLX: Screen 0 is not DRI capable
[    23.826] (II) AIGLX: Loaded and initialized swrast
[    23.826] (II) GLX: Initialized DRISWRAST GL provider for screen 0
[    24.036] (II) XKB: reuse xkmfile /var/lib/xkb/server-61B69DF58AD90EA75E0737749278E855D53885D4.xkm
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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