diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 1df3f70369222f4b584a01a2ad3ee7ba7a70c44c..e8cfac0dd7b32520ee6b43cd032e392cec6ae021 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -964,21 +964,18 @@ void BreakHandler::removeAllBreakpoints() for (int index = size(); --index >= 0;) removeBreakpointHelper(index); emit layoutChanged(); - saveBreakpoints(); + //saveBreakpoints(); updateMarkers(); } +/* void BreakHandler::setAllPending() { - QTC_ASSERT(false, /*ABC*/ return); -/* - loadBreakpoints(); for (int index = size(); --index >= 0;) at(index)->pending = true; - saveBreakpoints(); updateMarkers(); -*/ } +*/ void BreakHandler::saveSessionData() { @@ -1016,7 +1013,7 @@ void BreakHandler::initializeFromTemplate(BreakHandler *other) //qDebug() << "COPYING BREAKPOINTS INTO NEW SESSION"; QTC_ASSERT(m_bp.isEmpty(), /**/); foreach (BreakpointData *data, other->m_bp) - m_bp.append(data->clone()); + append(data->clone()); updateMarkers(); } diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index a697474e7e4a818eb04931989c34fa90ccb9c56b..2d15b488c70ede406ff5d8489ddeee9cb0389417 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -56,7 +56,7 @@ public: ~BreakHandler(); void removeAllBreakpoints(); - void setAllPending(); + //void setAllPending(); void loadSessionData(); void saveSessionData(); diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 1f95d73c152a17aa7255998578fcf74850cd3fe9..a437340010531647765c06a4d1a996907f21c979 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -678,16 +678,23 @@ void DebuggerManager::executeJumpToLine() } */ -void DebuggerEngine::cleanup() +// Called from RunControl. +void DebuggerEngine::handleFinished() { -/* - FIXME ABS: Still needed? modulesHandler()->removeAll(); - breakHandler()->setAllPending(); + //breakHandler()->setAllPending(); stackHandler()->removeAll(); threadsHandler()->removeAll(); watchHandler()->cleanup(); -*/ + + DebuggerEngine *sessionTemplate = plugin()->sessionTemplate(); + if (sessionTemplate != this) { + BreakHandler *handler = sessionTemplate->breakHandler(); + qDebug() << "MOVING BREAKPOINTS TO SESSION"; + handler->removeAllBreakpoints(); + handler->initializeFromTemplate(breakHandler()); + } + breakHandler()->removeAllBreakpoints(); } const DebuggerStartParameters &DebuggerEngine::startParameters() const diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index cf27d8291e2aa2c99679015e6c91a84afa285383..43c7a39dce7c6840bd0161233bdfbeea0bf577f8 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -216,7 +216,7 @@ public: QAbstractItemModel *snapshotModel() const; QAbstractItemModel *sourceFilesModel() const; - void cleanup(); + void handleFinished(); bool debuggerActionsEnabled() const; static bool debuggerActionsEnabled(DebuggerState state); void showModuleSymbols(const QString &moduleName, const Symbols &symbols); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 7757fd7d5f6ba6f2668314ccfce54756eda610d6..903869c6122e4eea9072e7327d61a60284d05d3a 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -2683,6 +2683,7 @@ void DebuggerPlugin::runControlStarted(DebuggerRunControl *runControl) void DebuggerPlugin::runControlFinished(DebuggerRunControl *runControl) { Q_UNUSED(runControl); + d->disconnectEngine(); qDebug() << "RUNCONTROL FINISHED: " << runControl; } diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index a0f2c36a58f0234069a84bac853d7668022ec30d..e6d7bf36ecf19ab49de0f333e99dcfd60a43f76b 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -209,6 +209,15 @@ DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration) m_enabledEngines = AllEngineTypes; } +DebuggerRunControl::~DebuggerRunControl() +{ + disconnect(); + DebuggerEngine *engine = m_engine; + m_engine = 0; + engine->disconnect(); + delete engine; +} + static DebuggerEngineType engineForToolChain(int toolChainType) { switch (toolChainType) { @@ -372,11 +381,6 @@ void DebuggerRunControl::createEngine(const DebuggerStartParameters &sp) } } -DebuggerRunControl::~DebuggerRunControl() -{ - delete m_engine; -} - QString DebuggerRunControl::displayName() const { QTC_ASSERT(m_engine, return QString()); @@ -481,6 +485,7 @@ void DebuggerRunControl::handleStarted() void DebuggerRunControl::handleFinished() { + engine()->handleFinished(); plugin()->runControlFinished(this); }