c++ - Qt app crash on build release but not on debug release -


is there commun issues cause app crash on release build not on debug build ?

the app crash on destruction.

i didn't post code cause don't know bug, , app quite big.

is there anyway can debug release build ??

edit: think problem when app main object destructor called , trying delete qqmlapplicationengine, application main object qobject holding pointer qqmlapplicationengine , it's engine parent.

application.h:

#ifndef application_h #define application_h  #include <qobject> #include <qqmlapplicationengine> #include <qsqlitesettings> #include "pluginloader.h" #include "notificationmodel.h"  #define main_qml_file "qrc:/qml/main.qml" #define ui_reportpresneter_name "uiireportcontainer"  class application : public qobject {     q_object     q_property(bool loadingplugin read loadingplugin notify loadingpluginchanged) public:     explicit application(qobject *parent = nullptr);     virtual ~application();      bool loadingplugin() const;  signals:     void loadingpluginchanged(bool loadingplugin);  public slots:      void setloadingplugin(bool loadingplugin);     void handlereport(ireport* report);  private slots:     void addaffairstatereporttoui(ireport* item);     void showreportdetails(qquickitem* item);  private:     pluginloader* _loader;     qqmlapplicationengine* _engine;     qsqlitesettings* _settings;     notificationmodel* _notificationmodel;     qobject* _uirootobject;  private: // methods     void setuprootcontextproperties();     void setupqmlengine();     void setuppluginloader();  private: // friends classes     friend class pluginloader;     bool _loadingplugin; };  #endif // application_h 

application.cpp:

#include "application.h"  #include <qcoreapplication> #include <qqmlcontext> #include <qvariant> #include <qstring> #include <qdebug> #include <qmetaobject>  #include <plugininterfaces/ireport.h>  application::application(qobject *parent) : qobject(parent),     _loader(new pluginloader(*this, this)),     _engine(new qqmlapplicationengine(this)),     _settings(new qsqlitesettings(qsettings::userscope, this)),     _notificationmodel(new notificationmodel(this)) {     setupqmlengine();     setuppluginloader();     _loader->loadplugins(); }  application::~application() {     qdebug() << "application dest called";     qdebug() << this->children(); }  bool application::loadingplugin() const {     return _loadingplugin; }  void application::setloadingplugin(bool loadingplugin) {     if (_loadingplugin == loadingplugin)         return;      _loadingplugin = loadingplugin;     emit loadingpluginchanged(_loadingplugin); }  void application::setuprootcontextproperties() {     _engine->rootcontext()->setcontextproperty("notificationmodel", _notificationmodel);     _engine->rootcontext()->setcontextobject(this); }  void application::setupqmlengine() {     setuprootcontextproperties();     _engine->load(qurl(main_qml_file));     if(_engine->rootobjects().isempty()) {         qcritical() << "unable load main qml file.";         exit(exit_failure);     }     _uirootobject = _engine->rootobjects()[0];     qinfo() << "ui root object : " << _uirootobject; }  void application::setuppluginloader() {     qobject::connect(_loader, &pluginloader::loadingstarted, [&](){ this->setloadingplugin(true); });     qobject::connect(_loader, &pluginloader::loadingfinished, [&](){ this->setloadingplugin(false); }); }  void application::addaffairstatereporttoui(ireport *item) {     if (item == nullptr)         return;     qquickitem* = item->overview();     if(i == nullptr) {         return;     }     qmetaobject::invokemethod(_uirootobject, "newaffairstatereport", q_arg(qvariant, qvariant::fromvalue(i)));     qobject::connect(item, signal(showdetails(qquickitem*)), this, slot(showreportdetails(qquickitem*))); }  void application::showreportdetails(qquickitem *item) {     if (item == nullptr)         return;     qmetaobject::invokemethod(_uirootobject, "showreportdetails", q_arg(qvariant, qvariant::fromvalue(item))); }  void application::handlereport(ireport* report) {     switch (report->type()) {     case ireport::type::affairstate:         addaffairstatereporttoui(report);         break;     case ireport::type::financialstate:     case ireport::type::planstate:     case ireport::type::sitestate:     case ireport::type::miscellaneous:         break;     } } 

system info:

windows 10

64bits

qt 5.9.1

msvc2017


Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -