Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Приложение Qt+QML зависает через много часов работы
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Osolemio
Доброго дня, други. Может поможете в чем и наставите на мысли умные :)

Не понимаю куда смотреть:
Имеется проект 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
Похоже самому придется разбираться
Вроде все в Sqlite обработке. И похоже я попал на http://beets.io/blog/sqlite-nightmare.html lock timeout.
Поменял настройки SQLite, запустил. Часиков через 10-15 расскажу - оно или нет :)
Всем, кто смотрел, спасибо ;)
Osolemio
Кому интересно:

с SQLite все хорошо. Зависания не пропали.
Пришлось сегодня совсем опуститься :D До дизассемблера. 14 часов ждал.
На самом деле бесконечный цикл. Великий WhatIsHang был прав.
Цикл образуется в коде libQt5QuickParticles.so.5 с возвратом в libQt5Core.so.5 и обратно. Больше никуда не вылезает.
Теперь буду смотреть из-за чего он вылезает.
Вот такие сюрпризы от этих particles

За сим кланяюсь. Всех благ форуму!
Osolemio
UPD:

Сделал тестовое приложение. Простой эмиттер частиц. Результат тот же.
Вывод: Particle System в режиме долгой работы с большим количеством частиц вызывает через некоторое время бесконечный цикл между функциями:

QHashData::allocateNode(int) и

QQuickParticleDataHeap::insertTimed(QQuickParticleData *, int)

Каждый N циклов еще вызов вот этих:

QQuickParticleGroupData::recycle()

QHashData:: detach_helper

Воспроизводится на всех ОС, всех компиляторах.

Сегодня отправил в Qt баг репорт. Рассмотрен. Присвоена важность "Критический" P1
Ожидаю исправлений.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.