diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 605e3a9a3c3513a5223f246d71ba24818e2774b7..9146e293832b24a5ad6975f0fb1be0734ecc8853 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -417,12 +417,14 @@ void GdbEngine::handleResponse(const QByteArray &buff) QByteArray id = result.findChild("id").data(); if (!id.isEmpty()) showStatusMessage(tr("Library %1 loaded.").arg(_(id))); + m_modulesListOutdated = true; } else if (asyncClass == "library-unloaded") { // Archer has 'id="/usr/lib/libdrm.so.2", // target-name="/usr/lib/libdrm.so.2", // host-name="/usr/lib/libdrm.so.2" QByteArray id = result.findChild("id").data(); showStatusMessage(tr("Library %1 unloaded.").arg(_(id))); + m_modulesListOutdated = true; } else if (asyncClass == "thread-group-created") { // Archer has "{id="28902"}" QByteArray id = result.findChild("id").data(); @@ -451,6 +453,7 @@ void GdbEngine::handleResponse(const QByteArray &buff) #if defined(Q_OS_MAC) } else if (asyncClass == "shlibs-updated") { // MAC announces updated libs + m_modulesListOutdated = true; } else if (asyncClass == "shlibs-added") { // MAC announces added libs // {shlib-info={num="2", name="libmathCommon.A_debug.dylib", @@ -458,6 +461,7 @@ void GdbEngine::handleResponse(const QByteArray &buff) // state="Y", path="/usr/lib/system/libmathCommon.A_debug.dylib", // description="/usr/lib/system/libmathCommon.A_debug.dylib", // loaded_addr="0x7f000", slide="0x7f000", prefix=""}} + m_modulesListOutdated = true; #endif } else { qDebug() << "IGNORED ASYNC OUTPUT" @@ -491,6 +495,7 @@ void GdbEngine::handleResponse(const QByteArray &buff) // Show some messages to give the impression something happens. if (data.startsWith("Reading symbols from ")) { showStatusMessage(tr("Reading %1...").arg(_(data.mid(21))), 1000); + m_modulesListOutdated = true; } else if (data.startsWith("[New ") || data.startsWith("[Thread ")) { if (data.endsWith('\n')) data.chop(1); @@ -1052,6 +1057,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data) const QByteArray &msg = data.findChild("consolestreamoutput").data(); if (msg.contains("Stopped due to shared library event") || reason.isEmpty()) { + m_modulesListOutdated = true; if (theDebuggerBoolSetting(SelectedPluginBreakpoints)) { QString dataStr = _(data.toString()); debugMessage(_("SHARED LIBRARY EVENT: ") + dataStr); @@ -1062,7 +1068,6 @@ void GdbEngine::handleStopResponse(const GdbMi &data) showStatusMessage(tr("Loading %1...").arg(dataStr)); return; } - m_modulesListOutdated = true; // fall through } @@ -1153,10 +1158,8 @@ void GdbEngine::handleStop1(const GdbResponse &response) void GdbEngine::handleStop1(const GdbMi &data) { - if (m_modulesListOutdated) { + if (m_modulesListOutdated) reloadModules(); - m_modulesListOutdated = false; - } QByteArray reason = data.findChild("reason").data(); if (reason == "breakpoint-hit") { showStatusMessage(tr("Stopped at breakpoint.")); @@ -2166,6 +2169,7 @@ QList<Symbol> GdbEngine::moduleSymbols(const QString &moduleName) void GdbEngine::reloadModules() { + m_modulesListOutdated = false; postCommand(_("info shared"), CB(handleModulesList)); }