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 1ebd3c1750

Fixes: QTCREATORBUG-32478
Change-Id: I06c377ec6762371ab16582ae0fcdef6cacff1f83
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2025-02-14 11:35:41 +01:00
parent 1ca2ecdb3c
commit 27aa01d251
3 changed files with 6 additions and 1 deletions

View File

@@ -268,6 +268,9 @@ public:
void setServerEssential(bool on) { m_serverEssential = on; } void setServerEssential(bool on) { m_serverEssential = on; }
bool serverEssential() const { return m_serverEssential; } 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; } void setAddQmlServerInferiorCmdArgIfNeeded(bool on) { m_addQmlServerInferiorCmdArgIfNeeded = on; }
bool isAddQmlServerInferiorCmdArgIfNeeded() const { return m_addQmlServerInferiorCmdArgIfNeeded; } bool isAddQmlServerInferiorCmdArgIfNeeded() const { return m_addQmlServerInferiorCmdArgIfNeeded; }
@@ -367,6 +370,7 @@ private:
Utils::ProcessHandle m_serverAttachPid; Utils::ProcessHandle m_serverAttachPid;
bool m_serverUseMulti = true; bool m_serverUseMulti = true;
bool m_serverEssential = true; bool m_serverEssential = true;
bool m_skipDebugServer = false;
bool m_addQmlServerInferiorCmdArgIfNeeded = false; bool m_addQmlServerInferiorCmdArgIfNeeded = false;
}; };

View File

@@ -562,7 +562,7 @@ void DebuggerRunTool::showMessage(const QString &msg, int channel, int timeout)
void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup() void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup()
{ {
if (!runControl()->usesDebugChannel()) { if (!runControl()->usesDebugChannel() || m_runParameters.skipDebugServer()) {
continueAfterDebugServerStart(); continueAfterDebugServerStart();
return; return;
} }

View File

@@ -208,6 +208,7 @@ public:
rp.setCloseMode(KillAtClose); rp.setCloseMode(KillAtClose);
rp.setUseCtrlCStub(true); rp.setUseCtrlCStub(true);
rp.setSolibSearchPath(FileUtils::toFilePathList(searchPaths(k))); rp.setSolibSearchPath(FileUtils::toFilePathList(searchPaths(k)));
rp.setSkipDebugServer(true);
if (auto qtVersion = dynamic_cast<QnxQtVersion *>(QtSupport::QtKitAspect::qtVersion(k))) { if (auto qtVersion = dynamic_cast<QnxQtVersion *>(QtSupport::QtKitAspect::qtVersion(k))) {
rp.setSysRoot(qtVersion->qnxTarget()); rp.setSysRoot(qtVersion->qnxTarget());
rp.modifyDebuggerEnvironment(qtVersion->environment()); rp.modifyDebuggerEnvironment(qtVersion->environment());