summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/debuggerengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/debugger/debuggerengine.cpp')
-rw-r--r--src/plugins/debugger/debuggerengine.cpp62
1 files changed, 39 insertions, 23 deletions
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 0b6a6d55f0..49138ef1e1 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -288,7 +288,6 @@ public:
this, [this] { updateState(true); });
}
-
~DebuggerEnginePrivate()
{
destroyPerspective();
@@ -324,6 +323,9 @@ public:
if (!m_perspective)
return;
+ delete m_perspective;
+ m_perspective = nullptr;
+
EngineManager::unregisterEngine(m_engine);
// Give up ownership on claimed breakpoints.
@@ -331,9 +333,6 @@ public:
m_toolTipManager.deregisterEngine();
m_memoryAgents.handleDebuggerFinished();
- delete m_perspective;
- m_perspective = nullptr;
-
setBusyCursor(false);
}
@@ -419,6 +418,7 @@ public:
void updateReverseActions();
DebuggerEngine *m_engine = nullptr; // Not owned.
+ QString m_runId;
QPointer<RunConfiguration> m_runConfiguration; // Not owned.
QString m_debuggerName;
Perspective *m_perspective = nullptr;
@@ -518,9 +518,14 @@ void DebuggerEnginePrivate::setupViews()
const DebuggerRunParameters &rp = m_runParameters;
QTC_CHECK(!m_perspective);
- const QString perspectiveId = "Debugger.Perspective." + m_debuggerName + '.' + rp.displayName;
- m_perspective = new Perspective(perspectiveId, m_engine->displayName(),
- Debugger::Constants::PRESET_PERSPECTIVE_ID);
+
+ m_perspective = new Perspective("Debugger.Perspective." + m_runId,
+ m_engine->displayName(),
+ Debugger::Constants::PRESET_PERSPECTIVE_ID,
+ m_debuggerName);
+ m_perspective->setShouldPersistChecker([this] {
+ return EngineManager::isLastOf(m_debuggerName);
+ });
m_progress.setProgressRange(0, 1000);
FutureProgress *fp = ProgressManager::addTask(m_progress.future(),
@@ -562,10 +567,6 @@ void DebuggerEnginePrivate::setupViews()
QSettings *settings = ICore::settings();
- auto dockId = [perspectiveId](const QString &dockname) {
- return QString(dockname + '.' + perspectiveId);
- };
-
m_modulesView = new BaseTreeView;
m_modulesView->setModel(m_modulesHandler.model());
m_modulesView->setSortingEnabled(true);
@@ -574,7 +575,7 @@ void DebuggerEnginePrivate::setupViews()
m_engine, &DebuggerEngine::reloadModules,
Qt::QueuedConnection);
m_modulesWindow = addSearch(m_modulesView);
- m_modulesWindow->setObjectName(dockId(DOCKWIDGET_MODULES));
+ m_modulesWindow->setObjectName(DOCKWIDGET_MODULES);
m_modulesWindow->setWindowTitle(tr("&Modules"));
m_registerView = new BaseTreeView;
@@ -585,7 +586,7 @@ void DebuggerEnginePrivate::setupViews()
m_engine, &DebuggerEngine::reloadRegisters,
Qt::QueuedConnection);
m_registerWindow = addSearch(m_registerView);
- m_registerWindow->setObjectName(dockId(DOCKWIDGET_REGISTER));
+ m_registerWindow->setObjectName(DOCKWIDGET_REGISTER);
m_registerWindow->setWindowTitle(tr("Reg&isters"));
m_stackView = new BaseTreeView;
@@ -593,7 +594,7 @@ void DebuggerEnginePrivate::setupViews()
m_stackView->setSettings(settings, "Debugger.StackView");
m_stackView->setIconSize(QSize(10, 10));
m_stackWindow = addSearch(m_stackView);
- m_stackWindow->setObjectName(dockId(DOCKWIDGET_STACK));
+ m_stackWindow->setObjectName(DOCKWIDGET_STACK);
m_stackWindow->setWindowTitle(tr("&Stack"));
m_sourceFilesView = new BaseTreeView;
@@ -604,7 +605,7 @@ void DebuggerEnginePrivate::setupViews()
m_engine, &DebuggerEngine::reloadSourceFiles,
Qt::QueuedConnection);
m_sourceFilesWindow = addSearch(m_sourceFilesView);
- m_sourceFilesWindow->setObjectName(dockId(DOCKWIDGET_SOURCE_FILES));
+ m_sourceFilesWindow->setObjectName(DOCKWIDGET_SOURCE_FILES);
m_sourceFilesWindow->setWindowTitle(tr("Source Files"));
m_threadsView = new BaseTreeView;
@@ -613,13 +614,13 @@ void DebuggerEnginePrivate::setupViews()
m_threadsView->setSettings(settings, "Debugger.ThreadsView");
m_threadsView->setIconSize(QSize(10, 10));
m_threadsWindow = addSearch(m_threadsView);
- m_threadsWindow->setObjectName(dockId(DOCKWIDGET_THREADS));
+ m_threadsWindow->setObjectName(DOCKWIDGET_THREADS);
m_threadsWindow->setWindowTitle(tr("&Threads"));
m_returnView = new WatchTreeView{ReturnType};
m_returnView->setModel(m_watchHandler.model());
m_returnWindow = addSearch(m_returnView);
- m_returnWindow->setObjectName(dockId("CppDebugReturn"));
+ m_returnWindow->setObjectName("CppDebugReturn");
m_returnWindow->setWindowTitle(tr("Locals"));
m_returnWindow->setVisible(false);
@@ -627,26 +628,26 @@ void DebuggerEnginePrivate::setupViews()
m_localsView->setModel(m_watchHandler.model());
m_localsView->setSettings(settings, "Debugger.LocalsView");
m_localsWindow = addSearch(m_localsView);
- m_localsWindow->setObjectName(dockId("CppDebugLocals"));
+ m_localsWindow->setObjectName("CppDebugLocals");
m_localsWindow->setWindowTitle(tr("Locals"));
m_inspectorView = new WatchTreeView{InspectType};
m_inspectorView->setModel(m_watchHandler.model());
m_inspectorView->setSettings(settings, "Debugger.LocalsView"); // sic! same as locals view.
m_inspectorWindow = addSearch(m_inspectorView);
- m_inspectorWindow->setObjectName(dockId("Inspector"));
+ m_inspectorWindow->setObjectName("Inspector");
m_inspectorWindow->setWindowTitle(tr("Locals"));
m_watchersView = new WatchTreeView{WatchersType};
m_watchersView->setModel(m_watchHandler.model());
m_watchersView->setSettings(settings, "Debugger.WatchersView");
m_watchersWindow = addSearch(m_watchersView);
- m_watchersWindow->setObjectName(dockId("CppDebugWatchers"));
+ m_watchersWindow->setObjectName("CppDebugWatchers");
m_watchersWindow->setWindowTitle(tr("&Expressions"));
m_localsAndInspectorWindow = new LocalsAndInspectorWindow(
m_localsWindow, m_inspectorWindow, m_returnWindow);
- m_localsAndInspectorWindow->setObjectName(dockId(DOCKWIDGET_LOCALS_AND_INSPECTOR));
+ m_localsAndInspectorWindow->setObjectName(DOCKWIDGET_LOCALS_AND_INSPECTOR);
m_localsAndInspectorWindow->setWindowTitle(m_localsWindow->windowTitle());
// Locals
@@ -663,10 +664,10 @@ void DebuggerEnginePrivate::setupViews()
m_breakView->setModel(m_breakHandler.model());
m_breakView->setRootIsDecorated(true);
m_breakWindow = addSearch(m_breakView);
- m_breakWindow->setObjectName(dockId(DOCKWIDGET_BREAK));
+ m_breakWindow->setObjectName(DOCKWIDGET_BREAK);
m_breakWindow->setWindowTitle(tr("&Breakpoints"));
- m_perspective->addToolBarWidget(EngineManager::engineChooser());
+ m_perspective->addToolBarSwitcher(EngineManager::engineChooser(), false);
m_perspective->addToolBarAction(&m_continueAction);
m_perspective->addToolBarAction(&m_interruptAction);
@@ -798,6 +799,11 @@ void DebuggerEngine::setDebuggerName(const QString &name)
d->m_debuggerName = name;
}
+QString DebuggerEngine::debuggerName() const
+{
+ return d->m_debuggerName;
+}
+
QString DebuggerEngine::stateName(int s)
{
# define SN(x) case x: return QLatin1String(#x);
@@ -930,6 +936,11 @@ void DebuggerEngine::setRunParameters(const DebuggerRunParameters &runParameters
d->m_runParameters = runParameters;
}
+void DebuggerEngine::setRunId(const QString &id)
+{
+ d->m_runId = id;
+}
+
void DebuggerEngine::setRunTool(DebuggerRunTool *runTool)
{
RunControl *runControl = runTool->runControl();
@@ -2444,6 +2455,11 @@ void DebuggerEngine::startDying() const
other->d->m_isDying = true;
}
+QString DebuggerEngine::runId() const
+{
+ return d->m_runId;
+}
+
bool DebuggerRunParameters::isCppDebugging() const
{
return cppEngineType == GdbEngineType