diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index b1eff543d5f..2964ba0c729 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -256,6 +256,15 @@ public: void setUVisionSimulator(bool on) { m_uVisionSimulator = on; } bool uVisionSimulator() const { return m_uVisionSimulator; } + void setServerAttachPid(const Utils::ProcessHandle &handle) { m_serverAttachPid = handle; } + Utils::ProcessHandle serverAttachPid() const { return m_serverAttachPid; } + + void setServerUseMulti(bool on) { m_serverUseMulti = on; } + bool serverUseMulti() const { return m_serverUseMulti; } + + void setServerEssential(bool on) { m_serverEssential = on; } + bool serverEssential() const { return m_serverEssential; } + private: DebuggerStartMode m_startMode = NoStartMode; DebuggerCloseMode m_closeMode = KillAtClose; @@ -348,6 +357,10 @@ private: Utils::FilePath m_uVisionProjectFilePath; // UVSC-specific debugger constant. Utils::FilePath m_uVisionOptionsFilePath; // UVSC-specific debugger constant. bool m_uVisionSimulator = false; + + Utils::ProcessHandle m_serverAttachPid; + bool m_serverUseMulti = true; + bool m_serverEssential = true; }; namespace Internal { diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 33675c31699..e0f7ec182f0 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1674,7 +1674,9 @@ void DebuggerPluginPrivate::attachToRunningApplication() auto debugger = new DebuggerRunTool(runControl); DebuggerRunParameters &rp = debugger->runParameters(); debugger->setId("AttachToRunningProcess"); - debugger->setUseDebugServer(ProcessHandle(processInfo.processId), false, false); + rp.setServerAttachPid(ProcessHandle(processInfo.processId)); + rp.setServerUseMulti(false); + rp.setServerEssential(false); rp.setStartMode(AttachToRemoteProcess); rp.setCloseMode(DetachAtClose); rp.setUseContinueInsteadOfRun(true); diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index 12af12c242e..8611f017947 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -96,9 +96,6 @@ public: // DebugServer Process debuggerServerProc; - ProcessHandle serverAttachPid; - bool serverUseMulti = true; - bool serverEssential = true; }; } // namespace Internal @@ -692,15 +689,15 @@ void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup() const QString ipAndPort("`echo $SSH_CLIENT | cut -d ' ' -f 1`:%1"); cmd.addArgs(ipAndPort.arg(runControl()->debugChannel().port()), CommandLine::Raw); - if (d->serverAttachPid.isValid()) - cmd.addArgs({"--attach", QString::number(d->serverAttachPid.pid())}); + if (m_runParameters.serverAttachPid().isValid()) + cmd.addArgs({"--attach", QString::number(m_runParameters.serverAttachPid().pid())}); else cmd.addCommandLineAsArgs(runControl()->runnable().command); } else { // Something resembling gdbserver - if (d->serverUseMulti) + if (m_runParameters.serverUseMulti()) cmd.addArg("--multi"); - if (d->serverAttachPid.isValid()) + if (m_runParameters.serverAttachPid().isValid()) cmd.addArg("--attach"); const auto port = runControl()->debugChannel().port(); @@ -713,8 +710,8 @@ void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup() d->debuggerServerProc.setExtraData(extraData); } - if (d->serverAttachPid.isValid()) - cmd.addArg(QString::number(d->serverAttachPid.pid())); + if (m_runParameters.serverAttachPid().isValid()) + cmd.addArg(QString::number(m_runParameters.serverAttachPid().pid())); } } @@ -745,21 +742,13 @@ void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup() connect(&d->debuggerServerProc, &Process::done, this, [this] { if (d->terminalProc.error() != QProcess::UnknownError) reportFailure(d->terminalProc.errorString()); - if (d->terminalProc.error() != QProcess::FailedToStart && d->serverEssential) + if (d->terminalProc.error() != QProcess::FailedToStart && m_runParameters.serverEssential()) reportDone(); }); d->debuggerServerProc.start(); } -void DebuggerRunTool::setUseDebugServer(ProcessHandle attachPid, bool essential, bool useMulti) -{ - runControl()->requestDebugChannel(); - d->serverAttachPid = attachPid; - d->serverEssential = essential; - d->serverUseMulti = useMulti; -} - // DebuggerRunWorkerFactory DebuggerRunWorkerFactory::DebuggerRunWorkerFactory() diff --git a/src/plugins/debugger/debuggerruncontrol.h b/src/plugins/debugger/debuggerruncontrol.h index abbfff91337..be7d2bd6d70 100644 --- a/src/plugins/debugger/debuggerruncontrol.h +++ b/src/plugins/debugger/debuggerruncontrol.h @@ -30,8 +30,6 @@ public: void start() override; void stop() override; - void setUseDebugServer(Utils::ProcessHandle attachPid, bool essential, bool useMulti); - void kickoffTerminalProcess(); void interruptTerminal(); diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp index 0ab389ee65d..d7f24b52025 100644 --- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp +++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp @@ -45,13 +45,13 @@ public: RemoteLinuxDebugWorkerFactory() { setProducer([](RunControl *rc) { + rc->requestDebugChannel(); + auto debugger = new DebuggerRunTool(rc, DebuggerRunTool::DoNotAllowTerminal); DebuggerRunParameters &rp = debugger->runParameters(); debugger->setId("RemoteLinuxDebugWorker"); - debugger->setupPortsGatherer(); debugger->addQmlServerInferiorCommandLineArgumentIfNeeded(); - debugger->setUseDebugServer({}, true, true); rp.setStartMode(AttachToRemoteServer); rp.setCloseMode(KillAndExitMonitorAtClose);