2011-03-12 5 views
1

J'ai une application hybride QML/C++ qui est assez complexe avec quelques threads mettant à jour les données en arrière-plan. Tout fonctionne parfaitement, sauf quand je fais une certaine ListView visible, remplir et puis quittez l'application, les pauses débogueur avec un échec d'assertion à l'adresse suivante:QT QML/C++ plantage de l'application à la sortie

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

et est ici la trace de la pile:

> 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 
    [email protected]@12() + 0x12 bytes  
    [email protected]() + 0x27 bytes 
    [email protected]() + 0x1b bytes  

Edit:

La question: Comment puis-je éliminer ce problème? Quel pourrait être le problème avec mon code? Il n'y a aucune information sur la façon dont cela peut arriver.

+0

Je ne suis pas sûr de ce que vous demandez ici. Si l'assertion échoue, cela signifie que 'm_prevBinding! = 0' à ce stade. Comme il n'y a pas de contexte dans votre question, je ne vois pas vraiment ce que vous demandez des conseils. – Mat

Répondre

1

Il est difficile de savoir ce qui se passe sans voir le code de l'application. Aussi s'il est possible de créer un exemple autonome qui reproduit ce crash, je suggère de déposer un bug au https://bugreports.qt.io.

1

Désolé pour la réponse tardive, j'ai inspecté mon fichier QML et découvert que le bogue se produit lorsque je définis plusieurs éléments "PropertyChange" avec la même cible dans un seul élément "State". J'ai regroupé tous les changements de propriété pour le même article dans un seul élément "PropertyChange" et le problème a disparu. Mais c'est assez étrange et l'échec de l'assertion n'est pas très définitif. Également essayé de reproduire le bug avec cette information, mais n'a pas pu réussir. Probablement il y a d'autres facteurs qui me manquent. Merci quand même.

Questions connexes