Сбой приложения QT QML / C ++ при выходе - PullRequest
1 голос
/ 12 марта 2011

У меня есть гибридное приложение QML / C ++, которое довольно сложное с несколькими потоками, обновляющими данные в фоновом режиме.Все работает безупречно, за исключением того, что когда я делаю определенный ListView видимым, заполняю его и затем выхожу из приложения, отладчик прерывается с ошибкой утверждения в следующем месте:

QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding()
{
    Q_ASSERT(m_prevBinding == 0); //<---- THIS GUY IS THE OFFENDING LINE
    Q_ASSERT(m_mePtr == 0); 
}   

и вот трассировка стека:

>   QtCored4.dll!qt_message_output(QtMsgType msgType, const char * buf)  Line 2270  C++
    QtCored4.dll!qt_message(QtMsgType msgType, const char * msg, char * ap)  Line 2328 + 0x12 bytes C++
    QtCored4.dll!qFatal(const char * msg, ...)  Line 2511 + 0xf bytes   C++
    QtCored4.dll!qt_assert(const char * assertion, const char * file, int line)  Line 2027 + 0x16 bytes C++
    QtDeclaratived4.dll!QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding()  Line 293 + 0x1e bytes  C++
    QtDeclaratived4.dll!QDeclarativeCompiledBindingsPrivate::Binding::~Binding()  + 0x3d bytes  C++
    QtDeclaratived4.dll!`eh vector destructor iterator'(void * ptr, unsigned int size, int count, void (void *)* pDtor)  + 0x6b bytes   C++
    QtDeclaratived4.dll!QDeclarativeCompiledBindingsPrivate::Binding::`vector deleting destructor'()  + 0x26 bytes  C++
    QtDeclaratived4.dll!QDeclarativeCompiledBindings::~QDeclarativeCompiledBindings()  Line 274 + 0x33 bytes    C++
    QtDeclaratived4.dll!QDeclarativeCompiledBindings::`scalar deleting destructor'()  + 0xf bytes   C++
    QtDeclaratived4.dll!QDeclarativeRefCount::release()  Line 66 + 0x20 bytes   C++
    QtDeclaratived4.dll!QDeclarativeCompiledBindingsPrivate::Binding::destroy()  Line 328   C++
    QtDeclaratived4.dll!QDeclarativeData::destroyed(QObject * object)  Line 1000    C++
    QtDeclaratived4.dll!QDeclarativeData::destroyed(QAbstractDeclarativeData * d, QObject * o)  Line 463    C++
    QtCored4.dll!QObject::~QObject()  Line 860 + 0x11 bytes C++
    QtDeclaratived4.dll!QDeclarativeAbstractAnimation::~QDeclarativeAbstractAnimation()  Line 94 + 0x2a bytes   C++
    QtDeclaratived4.dll!QDeclarativePropertyAnimation::~QDeclarativePropertyAnimation()  Line 1827 + 0x8 bytes  C++
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativePropertyAnimation>::~QDeclarativeElement<QDeclarativePropertyAnimation>()  Line 90 + 0xf bytes C++
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativePropertyAnimation>::`scalar deleting destructor'()  + 0xf bytes    C++
    QtCored4.dll!QObjectPrivate::deleteChildren()  Line 1949 + 0x24 bytes   C++
    QtCored4.dll!QObject::~QObject()  Line 947  C++
    QtDeclaratived4.dll!QDeclarativeTransition::~QDeclarativeTransition()  Line 168 + 0x9 bytes C++
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativeTransition>::~QDeclarativeElement<QDeclarativeTransition>()  Line 90 + 0xf bytes   C++
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativeTransition>::`scalar deleting destructor'()  + 0xf bytes   C++
    QtCored4.dll!QObjectPrivate::deleteChildren()  Line 1949 + 0x24 bytes   C++
    QtCored4.dll!QObject::~QObject()  Line 947  C++
    QtGuid4.dll!QGraphicsObject::~QGraphicsObject()  + 0x48 bytes   C++
    QtDeclaratived4.dll!QDeclarativeItem::~QDeclarativeItem()  Line 1504 + 0x1f bytes   C++
    QtDeclaratived4.dll!QDeclarativeRectangle::~QDeclarativeRectangle()  + 0xf bytes    C++
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativeRectangle>::~QDeclarativeElement<QDeclarativeRectangle>()  Line 90 + 0xf bytes C++
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativeRectangle>::`scalar deleting destructor'()  + 0xf bytes    C++
    QtDeclaratived4.dll!QDeclarativeViewPrivate::~QDeclarativeViewPrivate()  Line 135 + 0x67 bytes  C++
    QtDeclaratived4.dll!QDeclarativeViewPrivate::`scalar deleting destructor'()  + 0xf bytes    C++
    QtCored4.dll!QScopedPointerDeleter<QObjectData>::cleanup(QObjectData * pointer)  Line 62 + 0x20 bytes   C++
    QtCored4.dll!QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >::~QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >()  Line 100 + 0x9 bytes  C++
    QtCored4.dll!QObject::~QObject()  Line 963 + 0x12 bytes C++
    QtGuid4.dll!QWidget::~QWidget()  Line 1620 + 0x25 bytes C++
    QtGuid4.dll!QFrame::~QFrame()  Line 242 + 0x8 bytes C++
    QtGuid4.dll!QAbstractScrollArea::~QAbstractScrollArea()  Line 526 + 0xf bytes   C++
    QtGuid4.dll!QGraphicsView::~QGraphicsView()  Line 1165 + 0xf bytes  C++
    QtDeclaratived4.dll!QDeclarativeView::~QDeclarativeView()  Line 300 + 0x9 bytes C++
    MyApplication.exe!QDeclarativeView::`scalar deleting destructor'()  + 0x10 bytes    C++
    QtCored4.dll!QObjectPrivate::deleteChildren()  Line 1949 + 0x24 bytes   C++
    QtGuid4.dll!QWidget::~QWidget()  Line 1602  C++
    QtGuid4.dll!QMainWindow::~QMainWindow()  Line 389 + 0x22 bytes  C++
    MyApplication.exe!MainWindow::~MainWindow()  Line 77 + 0x66 bytes   C++
    MyApplication.exe!MainWindow::`scalar deleting destructor'()  + 0xf bytes   C++
    MyApplication.exe!boost::checked_delete<MainWindow>(MainWindow * x)  Line 34 + 0x21 bytes   C++
    MyApplication.exe!boost::detail::sp_counted_impl_p<MainWindow>::dispose()  Line 78 + 0xc bytes  C++
    MyApplication.exe!boost::detail::sp_counted_base::release()  Line 103   C++
    MyApplication.exe!boost::detail::shared_count::~shared_count()  Line 221    C++
    MyApplication.exe!boost::shared_ptr<MainWindow>::~shared_ptr<MainWindow>()  + 0x12 bytes    C++
    MyApplication.exe!boost::shared_ptr<MainWindow>::reset()  Line 387  C++
    MyApplication.exe!main(int argc, char * * argv)  Line 68    C++
    MyApplication.exe!WinMain(HINSTANCE__ * instance, HINSTANCE__ * prevInstance, char * __formal, int cmdShow)  Line 131 + 0x12 bytes  C++
    MyApplication.exe!__tmainCRTStartup()  Line 547 + 0x2c bytes    C
    MyApplication.exe!WinMainCRTStartup()  Line 371 C
    kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes    
    ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes   
    ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes    

Редактировать:

Вопрос: Как я могу устранить эту проблему?Что может быть не так с моим кодом?Нет информации о том, как это может произойти.

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Извините за поздний ответ, я проверил свой файл QML и обнаружил, что ошибка возникает, когда я определяю несколько элементов «PropertyChange» с одной и той же целью в одном элементе «Состояние». Я сгруппировал все изменения свойств для одного и того же элемента в один элемент «PropertyChange», и проблема исчезла. Но это довольно странно, и провал утверждения не является окончательным. Также пытался воспроизвести ошибку с этой информацией, но не смог. Наверное, есть и другие факторы, по которым я скучаю. В любом случае, спасибо.

1 голос
/ 14 марта 2011

Трудно понять, что происходит, не видя код приложения.Также, если возможно создать автономный пример, который воспроизводит этот сбой, я предлагаю подать ошибку в https://bugreports.qt.io.

...