diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-06-21 18:00:03 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-06-23 07:59:04 +0000 |
commit | 1e8139ecec107d5bb155ed7561fd43fdfb945bb2 (patch) | |
tree | 3e70e817a2348ef5bec5154fc7630487286fc9f2 /src/plugins/debugger/cdb/cdbengine.cpp | |
parent | fd47b37298827c399bc1e40774aeb0372c1d5735 (diff) | |
download | qt-creator-1e8139ecec107d5bb155ed7561fd43fdfb945bb2.tar.gz |
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>
Diffstat (limited to 'src/plugins/debugger/cdb/cdbengine.cpp')
-rw-r--r-- | src/plugins/debugger/cdb/cdbengine.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index b4d538485b..ce6ffac256 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); |