diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 05eecab488e..23e0b23038f 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2902,6 +2902,18 @@ void GdbEngine::runDebuggingHelper(const WatchData &data0, bool dumpChildren) } WatchData data = data0; + // Avoid endless loops created by faulty dumpers + if (m_processedNames.contains(data.iname)) { + emit gdbInputAvailable(LogStatus, + _("").arg(data.iname)); + data.setAllUnneeded(); + data.setValue(_("")); + data.setHasChildren(false); + insertData(data); + return; + } + m_processedNames.insert(data.iname); + QByteArray params; QStringList extraArgs; const QtDumperHelper::TypeData td = m_dumperHelper.typeData(data0.type); @@ -3531,6 +3543,7 @@ void GdbEngine::updateLocals() tryQueryDebuggingHelpers(); m_pendingRequests = 0; + m_processedNames.clear(); PENDING_DEBUG("\nRESET PENDING"); //m_toolTipCache.clear(); diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 74134e8d37a..405951e61a1 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -374,6 +374,7 @@ private: QString parseDisassembler(const GdbMi &lines); int m_pendingRequests; + QSet m_processedNames; QtDumperHelper m_dumperHelper;