forked from qt-creator/qt-creator
Utils: Add a QtcProcess flag to keep stdin open
Needed to run e.g. gdb on-device. Change-Id: I5a98df575478f18adf1540ced44f6808bdba0b76 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -128,6 +128,7 @@ public:
|
|||||||
|
|
||||||
bool m_lowPriority = false;
|
bool m_lowPriority = false;
|
||||||
bool m_disableUnixTerminal = false;
|
bool m_disableUnixTerminal = false;
|
||||||
|
bool m_keepStdInOpen = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class QtcProcessPrivate : public QObject
|
class QtcProcessPrivate : public QObject
|
||||||
@@ -433,6 +434,16 @@ void QtcProcess::setDisableUnixTerminal()
|
|||||||
d->m_process->m_disableUnixTerminal = true;
|
d->m_process->m_disableUnixTerminal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QtcProcess::setKeepWriteChannelOpen()
|
||||||
|
{
|
||||||
|
d->m_process->m_keepStdInOpen = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QtcProcess::keepsWriteChannelOpen() const
|
||||||
|
{
|
||||||
|
return d->m_process->m_keepStdInOpen;
|
||||||
|
}
|
||||||
|
|
||||||
void QtcProcess::setRemoteProcessHooks(const DeviceProcessHooks &hooks)
|
void QtcProcess::setRemoteProcessHooks(const DeviceProcessHooks &hooks)
|
||||||
{
|
{
|
||||||
s_deviceHooks = hooks;
|
s_deviceHooks = hooks;
|
||||||
|
|||||||
@@ -173,6 +173,9 @@ public:
|
|||||||
void closeWriteChannel();
|
void closeWriteChannel();
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
|
void setKeepWriteChannelOpen();
|
||||||
|
bool keepsWriteChannelOpen() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void started();
|
void started();
|
||||||
void finished();
|
void finished();
|
||||||
|
|||||||
@@ -3851,6 +3851,7 @@ void GdbEngine::setupEngine()
|
|||||||
if (QFileInfo(rp.debugger.workingDirectory).isDir())
|
if (QFileInfo(rp.debugger.workingDirectory).isDir())
|
||||||
m_gdbProc.setWorkingDirectory(rp.debugger.workingDirectory);
|
m_gdbProc.setWorkingDirectory(rp.debugger.workingDirectory);
|
||||||
m_gdbProc.setEnvironment(gdbEnv);
|
m_gdbProc.setEnvironment(gdbEnv);
|
||||||
|
m_gdbProc.setKeepWriteChannelOpen();
|
||||||
m_gdbProc.start();
|
m_gdbProc.start();
|
||||||
|
|
||||||
if (!m_gdbProc.waitForStarted()) {
|
if (!m_gdbProc.waitForStarted()) {
|
||||||
|
|||||||
@@ -946,6 +946,8 @@ void DockerDevice::runProcess(QtcProcess &process) const
|
|||||||
|
|
||||||
CommandLine cmd{"docker", {"exec"}};
|
CommandLine cmd{"docker", {"exec"}};
|
||||||
cmd.addArgs({"-w", workingDir.path()});
|
cmd.addArgs({"-w", workingDir.path()});
|
||||||
|
if (process.keepsWriteChannelOpen())
|
||||||
|
cmd.addArg("-i");
|
||||||
cmd.addArg(d->m_container);
|
cmd.addArg(d->m_container);
|
||||||
cmd.addArg(origCmd.executable().path()); // Cut off the docker://.../ bits.
|
cmd.addArg(origCmd.executable().path()); // Cut off the docker://.../ bits.
|
||||||
cmd.addArgs(origCmd.splitArguments(osType()));
|
cmd.addArgs(origCmd.splitArguments(osType()));
|
||||||
|
|||||||
Reference in New Issue
Block a user