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); }