Приложение Qt+QML зависает через много часов работы |
Здравствуйте, гость ( Вход | Регистрация )
Приложение Qt+QML зависает через много часов работы |
Osolemio |
25.10.2017, 0:03
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 24.10.2017 Пользователь №: 4645 Спасибо сказали: 4 раз(а) Репутация: 0 |
Доброго дня, други. Может поможете в чем и наставите на мысли умные
Не понимаю куда смотреть: Имеется проект Qt + QML. Без UI. БОльшая часть - интерфейсная QML. Сишная часть не очень большая. Пару объектов, интегрированных в динамически создаваемый QML объект в ApplicationWindow и сетевая читалка по таймеру. берущая удаленно данные всего лишь раз в 5 секунд. Несчастный килобайт. И пишет его в SQLite Db. Кушает CPU на уровне пары процентов. Т.е. легкая совсем. Есть особенность: в интерфейсе есть анимация с particle system. Проблема в том, что проверил уже на всех платформах: Вынь x32/64, Убунту, МакОС программа через часов 9-10 работы перестает отвечать. Valgrind - пусто. Ни одной ошибки до зависания. По остановке - тоже. Сейчас запустил с дебагером, может увижу где болтается при зависоне. Пробовал собирать на 5.9 - 5.9.2, MinGW, MSVC - результат один и тот же. Режимы OpenGPL менял (кстати, hang signature b3a6) - гуглил, разные проги имеют похожие подписи при "not responding" когда проблемы с видео-драйвером. Но тут на разных компах проверено. Пробовал WhatsHang. Говорит, что некий длииинный цикл. Ничего более хорошего не показывает. Нет у меня циклов. Вообще. И вложенных вызовов тоже не обнаружил. Чтение по сокету исключительно через слоты/сигналы. Один while несчастный чтения из сокета проверен-перепроверен. Ни один анализатор и профайлер ничего подозрительного не показывает. По всем данным нигде ни затыков, ни длинных операций, съедающих события. В этой части только 2 объекта сразу создаются через new и живут себе. Как вычислить "героя"? Несколько дней поисков ничего не дали. Буду премного благодарен, если ткнете носом в методику отладки данной погани. |
|
|
Osolemio |
25.10.2017, 15:33
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 24.10.2017 Пользователь №: 4645 Спасибо сказали: 4 раз(а) Репутация: 0 |
Похоже самому придется разбираться
Вроде все в Sqlite обработке. И похоже я попал на http://beets.io/blog/sqlite-nightmare.html lock timeout. Поменял настройки SQLite, запустил. Часиков через 10-15 расскажу - оно или нет Всем, кто смотрел, спасибо |
|
|
Osolemio |
26.10.2017, 2:02
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 24.10.2017 Пользователь №: 4645 Спасибо сказали: 4 раз(а) Репутация: 0 |
Кому интересно:
с SQLite все хорошо. Зависания не пропали. Пришлось сегодня совсем опуститься До дизассемблера. 14 часов ждал. На самом деле бесконечный цикл. Великий WhatIsHang был прав. Цикл образуется в коде libQt5QuickParticles.so.5 с возвратом в libQt5Core.so.5 и обратно. Больше никуда не вылезает. Теперь буду смотреть из-за чего он вылезает. Вот такие сюрпризы от этих particles За сим кланяюсь. Всех благ форуму! |
|
|
Osolemio |
31.10.2017, 16:40
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 24.10.2017 Пользователь №: 4645 Спасибо сказали: 4 раз(а) Репутация: 0 |
UPD:
Сделал тестовое приложение. Простой эмиттер частиц. Результат тот же. Вывод: Particle System в режиме долгой работы с большим количеством частиц вызывает через некоторое время бесконечный цикл между функциями: QHashData::allocateNode(int) и QQuickParticleDataHeap::insertTimed(QQuickParticleData *, int) Каждый N циклов еще вызов вот этих: QQuickParticleGroupData::recycle() QHashData:: detach_helper Воспроизводится на всех ОС, всех компиляторах. Сегодня отправил в Qt баг репорт. Рассмотрен. Присвоена важность "Критический" P1 Ожидаю исправлений. |
|
|
Текстовая версия | Сейчас: 25.11.2024, 18:48 |