aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2022-06-21 18:00:03 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2022-06-23 07:59:04 +0000
commit1e8139ecec107d5bb155ed7561fd43fdfb945bb2 (patch)
tree3e70e817a2348ef5bec5154fc7630487286fc9f2
parentfd47b37298827c399bc1e40774aeb0372c1d5735 (diff)
CdbEngine: Don't call blocking waitForStarted()
Connect to started() signal instead and continue setup in its handler. Handle failed to start case inside done() signal handler. Change-Id: I23fd222a6c73147ee439381cac79f29cffad560c Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp27
-rw-r--r--src/plugins/debugger/cdb/cdbengine.h2
2 files changed, 18 insertions, 11 deletions
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index b4d538485b9..ce6ffac2564 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -212,6 +212,7 @@ CdbEngine::CdbEngine() :
DebuggerSettings *s = debuggerSettings();
connect(s->createFullBacktrace.action(), &QAction::triggered,
this, &CdbEngine::createFullBacktrace);
+ connect(&m_process, &QtcProcess::started, this, &CdbEngine::processStarted);
connect(&m_process, &QtcProcess::done, this, &CdbEngine::processDone);
connect(&m_process, &QtcProcess::readyReadStandardOutput,
this, &CdbEngine::readyReadStandardOut);
@@ -382,12 +383,12 @@ void CdbEngine::setupEngine()
// Prepare command line.
CommandLine debugger{sp.debugger.command};
- const QString extensionFileName = extensionFi.fileName();
+ m_extensionFileName = extensionFi.fileName();
const bool isRemote = sp.startMode == AttachToRemoteServer;
if (isRemote) { // Must be first
debugger.addArgs({"-remote", sp.remoteChannel});
} else {
- debugger.addArg("-a" + extensionFileName);
+ debugger.addArg("-a" + m_extensionFileName);
}
// Source line info/No terminal breakpoint / Pull extension
@@ -469,20 +470,19 @@ void CdbEngine::setupEngine()
m_process.setCommand(debugger);
m_process.start();
- if (!m_process.waitForStarted()) {
- handleSetupFailure(QString("Internal error: Cannot start process %1: %2").
- arg(debugger.toUserOutput(), m_process.errorString()));
- return;
- }
+}
+void CdbEngine::processStarted()
+{
const qint64 pid = m_process.processId();
- showMessage(QString("%1 running as %2").arg(debugger.executable().toUserOutput()).arg(pid),
- LogMisc);
+ const FilePath execPath = runParameters().debugger.command.executable();
+ showMessage(QString("%1 running as %2").arg(execPath.toUserOutput()).arg(pid), LogMisc);
m_hasDebuggee = true;
m_initialSessionIdleHandled = false;
- if (isRemote) { // We do not get an 'idle' in a remote session, but are accessible
+ if (runParameters().startMode == AttachToRemoteServer) {
+ // We do not get an 'idle' in a remote session, but are accessible
m_accessible = true;
- runCommand({".load " + extensionFileName, NoFlags});
+ runCommand({".load " + m_extensionFileName, NoFlags});
handleInitialSessionIdle();
}
}
@@ -710,6 +710,11 @@ void CdbEngine::abortDebuggerProcess()
void CdbEngine::processDone()
{
+ if (m_process.result() == ProcessResult::StartFailed) {
+ handleSetupFailure(m_process.exitMessage());
+ return;
+ }
+
if (m_process.error() != QProcess::UnknownError)
showMessage(m_process.errorString(), LogError);
diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h
index 92d434f2bc3..1209d0ad3a7 100644
--- a/src/plugins/debugger/cdb/cdbengine.h
+++ b/src/plugins/debugger/cdb/cdbengine.h
@@ -106,6 +106,7 @@ public:
private:
void readyReadStandardOut();
void readyReadStandardError();
+ void processStarted();
void processDone();
void runCommand(const DebuggerCommand &cmd) override;
void adjustOperateByInstruction(bool);
@@ -222,6 +223,7 @@ private:
wow64Stack64Bit
} m_wow64State = wow64Uninitialized;
QElapsedTimer m_logTimer;
+ QString m_extensionFileName;
QString m_extensionMessageBuffer;
bool m_sourceStepInto = false;
int m_watchPointX = 0;