From 162d0e3d0957b434f33714df4ca892e41f9666c0 Mon Sep 17 00:00:00 2001 From: Tim Sander Date: Thu, 5 Jun 2014 15:10:43 +0200 Subject: [PATCH] RemoteLinux: switch to extended-remote connection Change-Id: If282a037e5b26f81859aaad8b407d644aa8b5c1c Reviewed-by: Orgad Shaneh Reviewed-by: hjk --- src/plugins/debugger/gdb/remotegdbserveradapter.cpp | 9 +++++++-- src/plugins/remotelinux/remotelinuxdebugsupport.cpp | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp index c031ab132c1..4d2098fc9da 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp @@ -295,7 +295,6 @@ void GdbRemoteServerEngine::handleTargetExtendedRemote(const GdbResponse &respon { QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state()); if (response.resultClass == GdbResultDone) { - // gdb server will stop the remote application itself. showMessage(_("ATTACHED TO GDB SERVER STARTED")); showMessage(msgAttachedToStoppedInferior(), StatusBar); QString postAttachCommands = debuggerCore()->stringSetting(GdbPostAttachCommands); @@ -303,7 +302,13 @@ void GdbRemoteServerEngine::handleTargetExtendedRemote(const GdbResponse &respon foreach (const QString &cmd, postAttachCommands.split(QLatin1Char('\n'))) postCommand(cmd.toLatin1()); } - postCommand("attach " + QByteArray::number(m_targetPid), CB(handleTargetExtendedAttach)); + if (m_targetPid > 0) { // attach to pid if valid + // gdb server will stop the remote application itself. + postCommand("attach " + QByteArray::number(m_targetPid), CB(handleTargetExtendedAttach)); + } else { + postCommand("-gdb-set remote exec-file " + startParameters().remoteExecutable.toLatin1(), + CB(handleTargetExtendedAttach)); + } } else { QString msg = msgConnectRemoteServerFailed( QString::fromLocal8Bit(response.data["msg"].data())); diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp index 8685b332230..db9b15f45d1 100644 --- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp +++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp @@ -60,6 +60,7 @@ public: : engine(engine), qmlDebugging(runConfig->extraAspect()->useQmlDebugger()), cppDebugging(runConfig->extraAspect()->useCppDebugger()), + target(DeviceKitInformation::device(runConfig->target()->kit())->sshParameters().host.toLatin1()), gdbServerPort(-1), qmlPort(-1) { } @@ -68,6 +69,7 @@ public: bool qmlDebugging; bool cppDebugging; QByteArray gdbserverOutput; + QByteArray target; int gdbServerPort; int qmlPort; }; @@ -175,8 +177,9 @@ void LinuxDeviceDebugSupport::startExecution() command = device()->debugServerPath(); if (command.isEmpty()) command = QLatin1String("gdbserver"); - args.prepend(remoteFilePath()); args.prepend(QString::fromLatin1(":%1").arg(d->gdbServerPort)); + args.prepend(QString::fromLatin1("--multi")); + args.prepend(QString::fromLatin1("--once")); } connect(runner, SIGNAL(finished(bool)), SLOT(handleAppRunnerFinished(bool))); @@ -260,6 +263,8 @@ void LinuxDeviceDebugSupport::handleAdapterSetupFailed(const QString &error) void LinuxDeviceDebugSupport::handleAdapterSetupDone() { AbstractRemoteLinuxRunSupport::handleAdapterSetupDone(); + QByteArray remote = d->target + ':' + QByteArray::number(d->gdbServerPort); + d->engine->notifyEngineRemoteServerRunning(remote, -1); d->engine->notifyEngineRemoteSetupDone(d->gdbServerPort, d->qmlPort); }