diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index 04d282015d6..c864626a848 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -54,6 +54,7 @@ #include #include +#include #include 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()) { + 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(); });