aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2012-03-26 16:03:25 +0200
committerhjk <qthjk@ovi.com>2012-03-26 16:37:42 +0200
commit95e2c9ca5725e6c35f4e02d8c9ee24f4f0f4499a (patch)
treec9e73df6845650bc6ed87b0620cbb4d1d21c9471
parentbbd5d2ddfe688303574c9bf760e89b9490f3efb5 (diff)
debugger: make the selection of detach or kill explicit
Change-Id: I6f80047ad229e0be851b06a277ab2f899757828f Reviewed-by: hjk <qthjk@ovi.com>
-rw-r--r--src/plugins/debugger/debuggerconstants.h6
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp8
-rw-r--r--src/plugins/debugger/debuggerstartparameters.h2
-rw-r--r--src/plugins/debugger/gdb/abstractgdbadapter.h1
-rw-r--r--src/plugins/debugger/gdb/attachgdbadapter.cpp5
-rw-r--r--src/plugins/debugger/gdb/attachgdbadapter.h1
-rw-r--r--src/plugins/debugger/gdb/codagdbadapter.cpp5
-rw-r--r--src/plugins/debugger/gdb/codagdbadapter.h1
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp16
-rw-r--r--src/plugins/debugger/gdb/gdbengine.h1
-rw-r--r--src/plugins/debugger/gdb/localplaingdbadapter.cpp5
-rw-r--r--src/plugins/debugger/gdb/localplaingdbadapter.h1
-rw-r--r--src/plugins/debugger/gdb/remotegdbserveradapter.cpp8
-rw-r--r--src/plugins/debugger/gdb/remotegdbserveradapter.h1
-rw-r--r--src/plugins/debugger/gdb/remoteplaingdbadapter.cpp5
-rw-r--r--src/plugins/debugger/gdb/remoteplaingdbadapter.h1
-rw-r--r--src/plugins/debugger/gdb/termgdbadapter.cpp5
-rw-r--r--src/plugins/debugger/gdb/termgdbadapter.h1
18 files changed, 25 insertions, 48 deletions
diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index 1367cbeb5b..5925f2df17 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 0eb329b346..45e1e3e824 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 b5eef3f226..4adc77a8d0 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 05410a9d61..51ed0bf5c5 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 6e1f91f175..28c722a4e0 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 01a6feb9fc..e9a41ac49d 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 1cc5135f5e..1049e4a2f5 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 d517cdedaf..56efb451a8 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 1bb0d94bec..db8cb4bac1 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 96c828e64a..0403bcd12b 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 0b0060ffa6..1e0ad9ff24 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 ced097faac..39181bac7e 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 0e3dd9e0ff..daf20e3df0 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 9261797d6d..7a3f88d642 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 5913ade032..a3a7263b14 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 b1e7644574..7c19e10df8 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 8acff6ede4..135630e875 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 d9ecee078d..b56d969cd2 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; }