diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index 561397ed36e47c34abc150a9f196f6f745d79710..971eb1e8d9c3fe5294602ccee2dd80ef0bf9b1ec 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -1053,6 +1053,15 @@ void DebuggerManager::sessionLoaded() loadSessionData(); } +void DebuggerManager::sessionUnloaded() +{ + cleanupViews(); + if (m_engine) + m_engine->shutdown(); + setStatus(DebuggerProcessNotReady); + setBusyCursor(false); +} + void DebuggerManager::aboutToSaveSession() { saveSessionData(); diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h index 4d9351d951d459ccd5fe0f565f4c52eb89841dc8..fb6bc9e36cfe2dee111d7df59282852dfbb7c94d 100644 --- a/src/plugins/debugger/debuggermanager.h +++ b/src/plugins/debugger/debuggermanager.h @@ -233,6 +233,7 @@ public slots: void updateWatchModel(); void sessionLoaded(); + void sessionUnloaded(); void aboutToSaveSession(); void assignValueInDebugger(); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 1046a9307bab311891471c6b6d897a4ea5c46075..2ecd00ffc2ad1a997bf7b1c1aa5608d1a9552752 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -752,6 +752,8 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess m_manager, SLOT(sessionLoaded())); connect(sessionManager(), SIGNAL(aboutToSaveSession()), m_manager, SLOT(aboutToSaveSession())); + connect(sessionManager(), SIGNAL(sessionUnloaded()), + m_manager, SLOT(sessionUnloaded())); // EditorManager QObject *editorManager = core->editorManager(); diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index 600a399f2562e636aa912921e7ad29183b8a5f1d..17cb99081acaae01620b9ad178dbca6359bc012c 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -398,6 +398,10 @@ void GdbEngine::handleResponse(const QByteArray &buff) // Archer has "{id="28902"}" } else if (asyncClass == "thread-created") { //"{id="1",group-id="28902"}" + } else if (asyncClass == "thread-group-exited") { + // Archer has "{id="28902"}" + } else if (asyncClass == "thread-exited") { + //"{id="1",group-id="28902"}" #ifdef Q_OS_MAC } else if (asyncClass == "shlibs-updated") { // MAC announces updated libs diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h index 8c38c1544e7e516e631faa8eae7beee82e37e64f..57e138b2edd09d4bdde702920a9858610ad22502 100644 --- a/src/plugins/debugger/registerhandler.h +++ b/src/plugins/debugger/registerhandler.h @@ -54,7 +54,6 @@ class RegisterHandler : public QAbstractTableModel public: RegisterHandler(QObject *parent = 0); - void sessionClosed(); QAbstractItemModel *model() { return this; } bool isEmpty() const; // nothing known so far? diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 54d46e2e5bfdf9fe3ff575175455ee6677fd4905..ad09041e9cf52ff5eea8a8cd68eb26605638e535 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -996,16 +996,16 @@ void SessionManager::removeProjects(QList<Project *> remove) void SessionManager::setValue(const QString &name, const QVariant &value) { - m_file->m_values.insert(name, value); + if (m_file) + m_file->m_values.insert(name, value); } QVariant SessionManager::value(const QString &name) { - QMap<QString, QVariant>::const_iterator it = m_file->m_values.find(name); - if (it != m_file->m_values.constEnd()) - return *it; - else + if (!m_file) return QVariant(); + QMap<QString, QVariant>::const_iterator it = m_file->m_values.find(name); + return (it == m_file->m_values.constEnd()) ? QVariant() : *it; } QString SessionManager::activeSession() const