diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index b2e818724eb..dff189c96dd 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3363,6 +3363,7 @@ void GdbEngine::updateLocals(const QVariant &cookie) { m_pendingRequests = 0; if (isSynchroneous()) { + m_processedNames.clear(); manager()->watchHandler()->beginCycle(); m_toolTipExpression.clear(); QStringList expanded = m_manager->watchHandler()->expandedINames().toList(); diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index ba7c24ff04f..1fe490c623f 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -31,6 +31,7 @@ #include "watchutils.h" #include "debuggeractions.h" #include "debuggermanager.h" +#include "idebuggerengine.h" #if USE_MODEL_TEST #include "modeltest.h" @@ -1124,8 +1125,18 @@ void WatchHandler::insertData(const WatchData &data) return; } if (data.isSomethingNeeded() && data.iname.contains('.')) { - MODEL_DEBUG("SOMETHING NEEDED: " << data.toString()); - m_manager->updateWatchData(data); + MODEL_DEBUGX("SOMETHING NEEDED: " << data.toString()); + if (!m_manager->currentEngine()->isSynchroneous()) { + m_manager->updateWatchData(data); + } else { + qDebug() << "ENDLESS LOOP: SOMETHING NEEDED: " << data.toString(); + WatchData data1 = data; + data1.setAllUnneeded(); + data1.setValue(QLatin1String("")); + data1.setHasChildren(false); + WatchModel *model = modelForIName(data.iname); + model->insertData(data1); + } } else { WatchModel *model = modelForIName(data.iname); QTC_ASSERT(model, return);