From 95e2c9ca5725e6c35f4e02d8c9ee24f4f0f4499a Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Mon, 26 Mar 2012 16:03:25 +0200 Subject: [PATCH] debugger: make the selection of detach or kill explicit Change-Id: I6f80047ad229e0be851b06a277ab2f899757828f Reviewed-by: hjk <qthjk@ovi.com> --- src/plugins/debugger/debuggerconstants.h | 6 ++++++ src/plugins/debugger/debuggerplugin.cpp | 8 ++++++++ src/plugins/debugger/debuggerstartparameters.h | 2 ++ src/plugins/debugger/gdb/abstractgdbadapter.h | 1 - src/plugins/debugger/gdb/attachgdbadapter.cpp | 5 ----- src/plugins/debugger/gdb/attachgdbadapter.h | 1 - src/plugins/debugger/gdb/codagdbadapter.cpp | 5 ----- src/plugins/debugger/gdb/codagdbadapter.h | 1 - src/plugins/debugger/gdb/gdbengine.cpp | 16 +++++++++------- src/plugins/debugger/gdb/gdbengine.h | 1 - .../debugger/gdb/localplaingdbadapter.cpp | 5 ----- src/plugins/debugger/gdb/localplaingdbadapter.h | 1 - .../debugger/gdb/remotegdbserveradapter.cpp | 8 -------- .../debugger/gdb/remotegdbserveradapter.h | 1 - .../debugger/gdb/remoteplaingdbadapter.cpp | 5 ----- src/plugins/debugger/gdb/remoteplaingdbadapter.h | 1 - src/plugins/debugger/gdb/termgdbadapter.cpp | 5 ----- src/plugins/debugger/gdb/termgdbadapter.h | 1 - 18 files changed, 25 insertions(+), 48 deletions(-) diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index 1367cbeb5bd..5925f2df179 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -134,6 +134,12 @@ enum DebuggerStartMode StartRemoteEngine // Start ipc guest engine on other machine }; +enum DebuggerCloseMode +{ + KillAtClose, + DetachAtClose +}; + enum DebuggerCapabilities { ReverseSteppingCapability = 0x1, diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 0eb329b346e..45e1e3e8243 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1339,6 +1339,7 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it, qulonglong pid = it->toULongLong(); if (pid) { sp.startMode = AttachExternal; + sp.closeMode = DetachAtClose; sp.attachPID = pid; sp.displayName = tr("Process %1").arg(sp.attachPID); sp.startMessage = tr("Attaching to local process %1.").arg(sp.attachPID); @@ -1560,6 +1561,7 @@ void DebuggerPluginPrivate::attachExternalApplication() sp.displayName = tr("Process %1").arg(dlg.attachPID()); sp.executable = dlg.executable(); sp.startMode = AttachExternal; + sp.closeMode = DetachAtClose; sp.toolChainAbi = dlg.abi(); sp.debuggerCommand = dlg.debuggerCommand(); if (DebuggerRunControl *rc = createDebugger(sp)) @@ -1572,6 +1574,7 @@ void DebuggerPluginPrivate::attachExternalApplication(RunControl *rc) sp.attachPID = rc->applicationProcessHandle().pid(); sp.displayName = tr("Debugger attached to %1").arg(rc->displayName()); sp.startMode = AttachExternal; + sp.closeMode = DetachAtClose; sp.toolChainAbi = rc->abi(); if (DebuggerRunControl *rc = createDebugger(sp)) startDebugger(rc); @@ -1617,6 +1620,7 @@ void DebuggerPluginPrivate::attachToRemoteServer(const QString &spec) sp.remoteArchitecture = spec.section(QLatin1Char('@'), 2, 2); sp.displayName = tr("Remote: \"%1\"").arg(sp.remoteChannel); sp.startMode = AttachToRemoteServer; + sp.closeMode = KillAtClose; sp.toolChainAbi = anyAbiOfBinary(sp.executable); if (DebuggerRunControl *rc = createDebugger(sp)) startDebugger(rc); @@ -1630,6 +1634,7 @@ void DebuggerPluginPrivate::startRemoteCdbSession() sp.toolChainAbi = Abi(hostAbi.architecture(), Abi::WindowsOS, Abi::WindowsMsvc2010Flavor, Abi::PEFormat, hostAbi.wordWidth()); sp.startMode = AttachToRemoteServer; + sp.closeMode = KillAtClose; StartRemoteCdbDialog dlg(mainWindow()); QString previousConnection = configValue(connectionKey).toString(); if (previousConnection.isEmpty()) @@ -1666,6 +1671,7 @@ void DebuggerPluginPrivate::attachToRemoteServer() DebuggerStartParameters sp; if (StartRemoteDialog::run(mainWindow(), m_coreSettings, false, &sp)) { sp.startMode = AttachToRemoteServer; + sp.closeMode = KillAtClose; sp.useServerStartScript = false; sp.serverStartScript.clear(); if (RunControl *rc = createDebugger(sp)) @@ -1742,6 +1748,7 @@ void DebuggerPluginPrivate::attachedToProcess(const QString &channel, sp.sysroot = sysroot; sp.executable = localExecutable; sp.startMode = AttachToRemoteServer; + sp.closeMode = KillAtClose; sp.overrideStartScript.clear(); sp.useServerStartScript = false; sp.serverStartScript.clear(); @@ -1785,6 +1792,7 @@ void DebuggerPluginPrivate::attachToQmlPort() sp.sysroot = dlg.sysroot(); sp.startMode = AttachToRemoteServer; + sp.closeMode = KillAtClose; sp.languages = QmlLanguage; // diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h index b5eef3f2262..4adc77a8d07 100644 --- a/src/plugins/debugger/debuggerstartparameters.h +++ b/src/plugins/debugger/debuggerstartparameters.h @@ -67,6 +67,7 @@ public: useServerStartScript(false), requestRemoteSetup(false), startMode(NoStartMode), + closeMode(KillAtClose), executableUid(0), communicationChannel(CommunicationChannelTcpIp), serverPort(0), @@ -125,6 +126,7 @@ public: QString dumperLibrary; QStringList dumperLibraryLocations; DebuggerStartMode startMode; + DebuggerCloseMode closeMode; // For Symbian debugging. quint32 executableUid; diff --git a/src/plugins/debugger/gdb/abstractgdbadapter.h b/src/plugins/debugger/gdb/abstractgdbadapter.h index 05410a9d61e..51ed0bf5c59 100644 --- a/src/plugins/debugger/gdb/abstractgdbadapter.h +++ b/src/plugins/debugger/gdb/abstractgdbadapter.h @@ -75,7 +75,6 @@ public: virtual void setupInferior() = 0; virtual void runEngine() = 0; virtual void interruptInferior() = 0; - virtual void shutdownInferior() = 0; virtual void shutdownAdapter() = 0; virtual AbstractGdbProcess *gdbProc() = 0; diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp index 6e1f91f1755..28c722a4e08 100644 --- a/src/plugins/debugger/gdb/attachgdbadapter.cpp +++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp @@ -116,11 +116,6 @@ void AttachGdbAdapter::interruptInferior() interruptLocalInferior(startParameters().attachPID); } -void AttachGdbAdapter::shutdownInferior() -{ - m_engine->defaultInferiorShutdown("detach"); -} - void AttachGdbAdapter::shutdownAdapter() { m_engine->notifyAdapterShutdownOk(); diff --git a/src/plugins/debugger/gdb/attachgdbadapter.h b/src/plugins/debugger/gdb/attachgdbadapter.h index 01a6feb9fc7..e9a41ac49d9 100644 --- a/src/plugins/debugger/gdb/attachgdbadapter.h +++ b/src/plugins/debugger/gdb/attachgdbadapter.h @@ -59,7 +59,6 @@ private: void setupInferior(); void runEngine(); void interruptInferior(); - void shutdownInferior(); void shutdownAdapter(); AbstractGdbProcess *gdbProc() { return &m_gdbProc; } diff --git a/src/plugins/debugger/gdb/codagdbadapter.cpp b/src/plugins/debugger/gdb/codagdbadapter.cpp index 1cc5135f5eb..1049e4a2f5f 100644 --- a/src/plugins/debugger/gdb/codagdbadapter.cpp +++ b/src/plugins/debugger/gdb/codagdbadapter.cpp @@ -1237,11 +1237,6 @@ void CodaGdbAdapter::cleanup() } } -void CodaGdbAdapter::shutdownInferior() -{ - m_engine->defaultInferiorShutdown("kill"); -} - void CodaGdbAdapter::shutdownAdapter() { if (m_gdbProc.state() == QProcess::Running) { diff --git a/src/plugins/debugger/gdb/codagdbadapter.h b/src/plugins/debugger/gdb/codagdbadapter.h index d517cdedaf1..56efb451a85 100644 --- a/src/plugins/debugger/gdb/codagdbadapter.h +++ b/src/plugins/debugger/gdb/codagdbadapter.h @@ -114,7 +114,6 @@ private: void setupInferior(); void runEngine(); void interruptInferior(); - void shutdownInferior(); void shutdownAdapter(); void sendRunControlTerminateCommand(); void handleRunControlTerminate(const Coda::CodaCommandResult &); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 1bb0d94bec3..db8cb4bac1c 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1893,13 +1893,15 @@ void GdbEngine::shutdownInferior() { QTC_ASSERT(state() == InferiorShutdownRequested, qDebug() << state()); m_commandsToRunOnTemporaryBreak.clear(); - m_gdbAdapter->shutdownInferior(); -} - -void GdbEngine::defaultInferiorShutdown(const char *cmd) -{ - QTC_ASSERT(state() == InferiorShutdownRequested, qDebug() << state()); - postCommand(cmd, NeedsStop | LosesChild, CB(handleInferiorShutdown)); + switch (startParameters().closeMode) { + case KillAtClose: + postCommand("kill", NeedsStop | LosesChild, CB(handleInferiorShutdown)); + break; + case DetachAtClose: + postCommand("detach", NeedsStop | LosesChild, CB(handleInferiorShutdown)); + break; + } + QTC_ASSERT(false, notifyInferiorShutdownFailed()); } void GdbEngine::handleInferiorShutdown(const GdbResponse &response) diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 96c828e64a6..0403bcd12bd 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -264,7 +264,6 @@ private: ////////// Gdb Process Management ////////// void handleNamespaceExtraction(const GdbResponse &response); void handleAdapterStarted(); - void defaultInferiorShutdown(const char *cmd); void loadInitScript(); void loadPythonDumpers(); void pythonDumpersFailed(); diff --git a/src/plugins/debugger/gdb/localplaingdbadapter.cpp b/src/plugins/debugger/gdb/localplaingdbadapter.cpp index 0b0060ffa63..1e0ad9ff24d 100644 --- a/src/plugins/debugger/gdb/localplaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/localplaingdbadapter.cpp @@ -114,11 +114,6 @@ void LocalPlainGdbAdapter::runEngine() AbstractPlainGdbAdapter::runEngine(); } -void LocalPlainGdbAdapter::shutdownInferior() -{ - m_engine->defaultInferiorShutdown("kill"); -} - void LocalPlainGdbAdapter::shutdownAdapter() { showMessage(_("PLAIN ADAPTER SHUTDOWN %1").arg(state())); diff --git a/src/plugins/debugger/gdb/localplaingdbadapter.h b/src/plugins/debugger/gdb/localplaingdbadapter.h index ced097faac3..39181bac7e6 100644 --- a/src/plugins/debugger/gdb/localplaingdbadapter.h +++ b/src/plugins/debugger/gdb/localplaingdbadapter.h @@ -58,7 +58,6 @@ private: void setupInferior(); void runEngine(); void interruptInferior(); - void shutdownInferior(); void shutdownAdapter(); DumperHandling dumperHandling() const; diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp index 0e3dd9e0ffa..daf20e3df0a 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp @@ -365,14 +365,6 @@ void RemoteGdbServerAdapter::handleInterruptInferior(const GdbResponse &response } } -void RemoteGdbServerAdapter::shutdownInferior() -{ - if (m_engine->startParameters().startMode == AttachToRemoteServer) - m_engine->defaultInferiorShutdown("detach"); - else - m_engine->defaultInferiorShutdown("kill"); -} - void RemoteGdbServerAdapter::shutdownAdapter() { m_engine->notifyAdapterShutdownOk(); diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.h b/src/plugins/debugger/gdb/remotegdbserveradapter.h index 9261797d6d4..7a3f88d642e 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.h +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.h @@ -59,7 +59,6 @@ private: void setupInferior(); void runEngine(); void interruptInferior(); - void shutdownInferior(); void shutdownAdapter(); AbstractGdbProcess *gdbProc() { return &m_gdbProc; } diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp index 5913ade0321..a3a7263b14a 100644 --- a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp @@ -98,11 +98,6 @@ void RemotePlainGdbAdapter::handleApplicationOutput(const QByteArray &output) showMessage(QString::fromUtf8(output), AppOutput); } -void RemotePlainGdbAdapter::shutdownInferior() -{ - m_engine->defaultInferiorShutdown("kill"); -} - void RemotePlainGdbAdapter::shutdownAdapter() { m_engine->notifyAdapterShutdownOk(); diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.h b/src/plugins/debugger/gdb/remoteplaingdbadapter.h index b1e76445748..7c19e10df89 100644 --- a/src/plugins/debugger/gdb/remoteplaingdbadapter.h +++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.h @@ -55,7 +55,6 @@ private: void startAdapter(); void setupInferior(); void interruptInferior(); - void shutdownInferior(); void shutdownAdapter(); void handleRemoteSetupDone(int gdbServerPort, int qmlPort); void handleRemoteSetupFailed(const QString &reason); diff --git a/src/plugins/debugger/gdb/termgdbadapter.cpp b/src/plugins/debugger/gdb/termgdbadapter.cpp index 8acff6ede48..135630e8758 100644 --- a/src/plugins/debugger/gdb/termgdbadapter.cpp +++ b/src/plugins/debugger/gdb/termgdbadapter.cpp @@ -210,11 +210,6 @@ void TermGdbAdapter::stubExited() m_engine->notifyEngineIll(); } -void TermGdbAdapter::shutdownInferior() -{ - m_engine->defaultInferiorShutdown("kill"); -} - void TermGdbAdapter::shutdownAdapter() { m_engine->notifyAdapterShutdownOk(); diff --git a/src/plugins/debugger/gdb/termgdbadapter.h b/src/plugins/debugger/gdb/termgdbadapter.h index d9ecee078d6..b56d969cd2d 100644 --- a/src/plugins/debugger/gdb/termgdbadapter.h +++ b/src/plugins/debugger/gdb/termgdbadapter.h @@ -62,7 +62,6 @@ private: void setupInferior(); void runEngine(); void interruptInferior(); - void shutdownInferior(); void shutdownAdapter(); AbstractGdbProcess *gdbProc() { return &m_gdbProc; } -- GitLab