diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index ad77ef80e3cc73a76997cf5aadb823eb903dfff9..f1dbc7b71dcff2eac05811c7a79ce230526be02c 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -318,6 +318,8 @@ void DebuggerManager::init() //tooltipView->setModel(m_watchHandler->model(TooltipsWatch)); //qRegisterMetaType<WatchData>("Debugger::Internal::WatchData"); qRegisterMetaType<WatchData>("WatchData"); + connect(m_watchHandler, SIGNAL(watchDataUpdateNeeded(WatchData)), + this, SLOT(updateWatchDataAnnounce())); connect(m_watchHandler, SIGNAL(watchDataUpdateNeeded(WatchData)), this, SLOT(updateWatchData(WatchData)), Qt::QueuedConnection); @@ -693,6 +695,12 @@ void DebuggerManager::updateWatchData(const WatchData &data) m_engine->updateWatchData(data); } +void DebuggerManager::updateWatchDataAnnounce() +{ + if (m_engine) + m_engine->updateWatchDataAnnounce(); +} + static inline QString msgEngineNotAvailable(const char *engine) { return DebuggerManager::tr("The application requires the debugger engine '%1', which is disabled.").arg(QLatin1String(engine)); diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h index de2a192abd1a3258cb481c36571a05a029c6cf8e..7d8ac4b37e99d6eb579987462011c602c96cbeb0 100644 --- a/src/plugins/debugger/debuggermanager.h +++ b/src/plugins/debugger/debuggermanager.h @@ -304,6 +304,7 @@ public slots: void detachDebugger(); void addToWatchWindow(); + void updateWatchDataAnnounce(); void updateWatchData(const WatchData &data); void sessionLoaded(); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 99718326c247551356672cab0e6b2857b87a4059..c12a4a1b1c8f8cfc6fcd7f9e612a0bc0cfcc2713 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -83,7 +83,7 @@ namespace Internal { using namespace Debugger::Constants; //#define DEBUG_PENDING 1 -#define DEBUG_SUBITEM 1 +//#define DEBUG_SUBITEM 1 #if DEBUG_PENDING # define PENDING_DEBUG(s) qDebug() << s @@ -3127,6 +3127,13 @@ void GdbEngine::updateSubItem(const WatchData &data0) QTC_ASSERT(false, return); } +void GdbEngine::updateWatchDataAnnounce() +{ + // Bump requests to avoid model rebuilding during the nested + // updateWatchModel runs. + ++m_pendingRequests; +} + void GdbEngine::updateWatchData(const WatchData &data) { //m_pendingRequests = 0; @@ -3137,9 +3144,6 @@ void GdbEngine::updateWatchData(const WatchData &data) //qDebug() << data.toString(); #endif - // Bump requests to avoid model rebuilding during the nested - // updateWatchModel runs. - ++m_pendingRequests; updateSubItem(data); //PENDING_DEBUG("INTERNAL TRIGGERING UPDATE WATCH MODEL"); --m_pendingRequests; @@ -3449,7 +3453,7 @@ void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item, WatchData childtemplate; setWatchDataType(childtemplate, item.findChild("childtype")); setWatchDataChildCount(childtemplate, item.findChild("childnumchild")); - qDebug() << "CHILD TEMPLATE:" << childtemplate.toString(); + //qDebug() << "CHILD TEMPLATE:" << childtemplate.toString(); int i = 0; foreach (GdbMi child, children.children()) { diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 07ef3bb8b8a76e9f631ec802990d3a5e7598089f..fdf67f15b8e57a3d7c9594cbf894a71e150133de 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -332,6 +332,7 @@ private: void updateSubItem(const WatchData &data); void updateWatchData(const WatchData &data); + void updateWatchDataAnnounce(); void rebuildModel(); void insertData(const WatchData &data); diff --git a/src/plugins/debugger/idebuggerengine.h b/src/plugins/debugger/idebuggerengine.h index 89ff30293195d52270afbb7a3e891f5777719720..327b1866c01273c09c47c3317e0d6ae166908112 100644 --- a/src/plugins/debugger/idebuggerengine.h +++ b/src/plugins/debugger/idebuggerengine.h @@ -63,6 +63,7 @@ public: virtual bool startDebugger(const QSharedPointer<DebuggerStartParameters> &startParameters) = 0; virtual void exitDebugger() = 0; virtual void detachDebugger() {} + virtual void updateWatchDataAnnounce() {} virtual void updateWatchData(const WatchData &data) = 0; virtual void stepExec() = 0; diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index fd6745014b9f87c78bd445c5edaf55b707bd5f57..13bf8698b30e6ad0ce2f29336bfbb91f1dd2e1a6 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -806,6 +806,8 @@ static int findInsertPosition(const QList<WatchItem *> &list, const WatchItem *i void WatchModel::insertData(const WatchData &data) { // qDebug() << "WMI:" << data.toString(); + static int bulk = 0; + //qDebug() << "SINGLE: " << ++bulk << data.toString(); QTC_ASSERT(!data.iname.isEmpty(), return); WatchItem *parent = findItem(parentName(data.iname), m_root); if (!parent) { @@ -844,8 +846,9 @@ void WatchModel::insertData(const WatchData &data) void WatchModel::insertBulkData(const QList<WatchData> &list) { //qDebug() << "WMI:" << list.toString(); + static int bulk = 0; //foreach (const WatchItem &data, list) - // qDebug() << data.toString(); + // qDebug() << "BULK: " << ++bulk << data.toString(); QTC_ASSERT(!list.isEmpty(), return); QString parentIName = parentName(list.at(0).iname); WatchItem *parent = findItem(parentIName, m_root); @@ -1001,6 +1004,12 @@ void WatchHandler::insertData(const WatchData &data) // bulk-insertion void WatchHandler::insertBulkData(const QList<WatchData> &list) { +#if 1 + foreach (const WatchItem &data, list) + insertData(data); + return; +#endif + if (list.isEmpty()) return; QMap<QString, QList<WatchData> > hash;