From e3f27b3d53e94aa81088edb019f2b6383fcdc170 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 21 Jun 2022 15:25:52 +0200 Subject: GdbEngine: 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: Iaf184ed3e934b1bd5f8128a6aa9c72e9f27e0f56 Reviewed-by: hjk --- src/plugins/debugger/gdb/gdbengine.cpp | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'src/plugins/debugger/gdb/gdbengine.cpp') diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 1fd3aef4aa..6dc3cb9d80 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -169,6 +169,8 @@ GdbEngine::GdbEngine() connect(&s.useDynamicType, &BaseAspect::changed, this, &GdbEngine::reloadLocals); + connect(&m_gdbProc, &QtcProcess::started, + this, &GdbEngine::handleGdbStarted); connect(&m_gdbProc, &QtcProcess::done, this, &GdbEngine::handleGdbDone); connect(&m_gdbProc, &QtcProcess::readyReadStandardOutput, @@ -3865,20 +3867,10 @@ void GdbEngine::setupEngine() m_gdbProc.setWorkingDirectory(rp.debugger.workingDirectory); m_gdbProc.setEnvironment(gdbEnv); m_gdbProc.start(); +} - if (!m_gdbProc.waitForStarted()) { - handleGdbStartFailed(); - QString msg; - FilePath wd = m_gdbProc.workingDirectory(); - if (!wd.isReadableDir()) - msg = failedToStartMessage() + ' ' + tr("The working directory \"%1\" is not usable.") - .arg(wd.toUserOutput()); - else - msg = RunWorker::userMessageForProcessError(QProcess::FailedToStart, rp.debugger.command.executable()); - handleAdapterStartFailed(msg); - return; - } - +void GdbEngine::handleGdbStarted() +{ showMessage("GDB STARTED, INITIALIZING IT"); runCommand({"show version", CB(handleShowVersion)}); runCommand({"show debug-file-directory", CB(handleDebugInfoLocation)}); @@ -3938,6 +3930,7 @@ void GdbEngine::setupEngine() showStatusMessage(tr("Setting up inferior...")); + const DebuggerRunParameters &rp = runParameters(); // Addint executable to modules list. Module module; module.startAddress = 0; @@ -4079,6 +4072,21 @@ void GdbEngine::reloadDebuggingHelpers() void GdbEngine::handleGdbDone() { + if (m_gdbProc.result() == ProcessResult::StartFailed) { + handleGdbStartFailed(); + QString msg; + const FilePath wd = m_gdbProc.workingDirectory(); + if (!wd.isReadableDir()) { + msg = failedToStartMessage() + ' ' + tr("The working directory \"%1\" is not usable.") + .arg(wd.toUserOutput()); + } else { + msg = RunWorker::userMessageForProcessError(QProcess::FailedToStart, + runParameters().debugger.command.executable()); + } + handleAdapterStartFailed(msg); + return; + } + const QProcess::ProcessError error = m_gdbProc.error(); if (error != QProcess::UnknownError) { QString msg = RunWorker::userMessageForProcessError(error, -- cgit v1.2.1