From 27aa01d2517aacb834f641a555baa2ecff47db70 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 14 Feb 2025 11:35:41 +0100 Subject: [PATCH] QNX: Fix debugging Before the amended change, when running QNX debugger, d->useDebugServer was false (DebuggerRunTool::setUseDebugServer() wasn't called in this case), so we called directly continueAfterDebugServerStart() from inside startDebugServerIfNeededAndContinueStartup(). After the amended change, usedDebugChannel() returns true, thus we are skipping direct execution of continueAfterDebugServerStart(), and we are starting a process that never ends instead. The fix is to introduce DebuggerRunParameters::m_skipDebugServer field, defaulting to false, and to set it to true in case of qnx debugging. Amends 1ebd3c1750a9044f753eaff5e343543c1983910f Fixes: QTCREATORBUG-32478 Change-Id: I06c377ec6762371ab16582ae0fcdef6cacff1f83 Reviewed-by: hjk --- src/plugins/debugger/debuggerengine.h | 4 ++++ src/plugins/debugger/debuggerruncontrol.cpp | 2 +- src/plugins/qnx/qnxdebugsupport.cpp | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index c7732607426..daa5dd278f6 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -268,6 +268,9 @@ public: void setServerEssential(bool on) { m_serverEssential = on; } bool serverEssential() const { return m_serverEssential; } + void setSkipDebugServer(bool on) { m_skipDebugServer = on; } + bool skipDebugServer() const { return m_skipDebugServer; } + void setAddQmlServerInferiorCmdArgIfNeeded(bool on) { m_addQmlServerInferiorCmdArgIfNeeded = on; } bool isAddQmlServerInferiorCmdArgIfNeeded() const { return m_addQmlServerInferiorCmdArgIfNeeded; } @@ -367,6 +370,7 @@ private: Utils::ProcessHandle m_serverAttachPid; bool m_serverUseMulti = true; bool m_serverEssential = true; + bool m_skipDebugServer = false; bool m_addQmlServerInferiorCmdArgIfNeeded = false; }; diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index c5a931d5d54..5fb02fbfae5 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -562,7 +562,7 @@ void DebuggerRunTool::showMessage(const QString &msg, int channel, int timeout) void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup() { - if (!runControl()->usesDebugChannel()) { + if (!runControl()->usesDebugChannel() || m_runParameters.skipDebugServer()) { continueAfterDebugServerStart(); return; } diff --git a/src/plugins/qnx/qnxdebugsupport.cpp b/src/plugins/qnx/qnxdebugsupport.cpp index 6a90fef38c8..f61fb097776 100644 --- a/src/plugins/qnx/qnxdebugsupport.cpp +++ b/src/plugins/qnx/qnxdebugsupport.cpp @@ -208,6 +208,7 @@ public: rp.setCloseMode(KillAtClose); rp.setUseCtrlCStub(true); rp.setSolibSearchPath(FileUtils::toFilePathList(searchPaths(k))); + rp.setSkipDebugServer(true); if (auto qtVersion = dynamic_cast(QtSupport::QtKitAspect::qtVersion(k))) { rp.setSysRoot(qtVersion->qnxTarget()); rp.modifyDebuggerEnvironment(qtVersion->environment());