开发者

QT QML/C++ application crash on exit

I have a QML / C++ hybrid application which is fairly complex with a few threads updating data in the background. Everything works flawlessly except when I make a certain ListView visible, populate it and then exit the application, the debugger breaks with an assertion failure at the following location:

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

and here is the stack trace:

>   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<QDeclarativePropertyAnimatio开发者_JAVA技巧n>::`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    

Edit:

The question: How can I eliminate this problem ? What might be wrong with my code ? There is no information regarding how this can happen.


Sorry for the late response, I inspected my QML file and discovered that the bug occurs when I define multiple "PropertyChange" elements with the same target in a single "State" element. I grouped all the property changes for the same item in a single "PropertyChange" element and the problem disappeared. But it's quite strange and the assertion failure is not very definitive. Also tried to reproduce the bug with this information but couldn't succeed. Probably there are other factors that I miss. Thanks anyways.


It's difficult to know what's going on without seeing the application code. Also if it is possible to create a standalone example that reproduces this crash, I suggest filing a bug at https://bugreports.qt.io.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜