Debugger: Fix Run in Terminal and output retrieval for RL/Boot2Qt/QNX

Amends 265491e408.

Replacing the DebuggerServerRunner by a simple Process lost the
SimpleTargetRunner's ability to run in terminal and to display output.
Re-add this.

Fixes: QTCREATORBUG-32072
Fixes: QTCREATORBUG-32074
Change-Id: I6439eeacbb2561f08b93cba140836919afe56efb
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2024-11-27 07:09:46 +01:00
parent c980a97db6
commit b1bf4594ba

View File

@@ -54,6 +54,7 @@
#include <qtsupport/qtkitaspect.h>
#include <QTcpServer>
#include <QTextCodec>
#include <QTimer>
using namespace Core;
@@ -104,6 +105,9 @@ public:
// DebugServer
Process debuggerServerProc;
QTextCodec *debuggerServerCodec = QTextCodec::codecForName("utf8");
QTextCodec::ConverterState outputCodecState; // FIXME: Handle on Process side.
QTextCodec::ConverterState errorCodecState;
ProcessHandle serverAttachPid;
bool serverUseMulti = true;
bool serverEssential = true;
@@ -1136,8 +1140,29 @@ void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup()
}
}
if (auto terminalAspect = runControl()->aspectData<TerminalAspect>()) {
const bool useTerminal = terminalAspect->useTerminal;
d->debuggerServerProc.setTerminalMode(useTerminal ? TerminalMode::Run : TerminalMode::Off);
}
d->debuggerServerProc.setCommand(cmd);
connect(&d->debuggerServerProc, &Process::readyReadStandardOutput,
this, [this] {
const QByteArray data = d->debuggerServerProc.readAllRawStandardOutput();
const QString msg = d->debuggerServerCodec->toUnicode(
data.constData(), data.length(), &d->outputCodecState);
runControl()->postMessage(msg, StdOutFormat, false);
});
connect(&d->debuggerServerProc, &Process::readyReadStandardError,
this, [this] {
const QByteArray data = d->debuggerServerProc.readAllRawStandardError();
const QString msg = d->debuggerServerCodec->toUnicode(
data.constData(), data.length(), &d->errorCodecState);
runControl()->postMessage(msg, StdErrFormat, false);
});
connect(&d->debuggerServerProc, &Process::started, this, [this] {
continueAfterDebugServerStart();
});