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 <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2022-06-21 15:25:52 +02:00
parent 627f6a2916
commit e3f27b3d53
2 changed files with 22 additions and 13 deletions

View File

@@ -169,6 +169,8 @@ GdbEngine::GdbEngine()
connect(&s.useDynamicType, &BaseAspect::changed, connect(&s.useDynamicType, &BaseAspect::changed,
this, &GdbEngine::reloadLocals); this, &GdbEngine::reloadLocals);
connect(&m_gdbProc, &QtcProcess::started,
this, &GdbEngine::handleGdbStarted);
connect(&m_gdbProc, &QtcProcess::done, connect(&m_gdbProc, &QtcProcess::done,
this, &GdbEngine::handleGdbDone); this, &GdbEngine::handleGdbDone);
connect(&m_gdbProc, &QtcProcess::readyReadStandardOutput, connect(&m_gdbProc, &QtcProcess::readyReadStandardOutput,
@@ -3865,20 +3867,10 @@ void GdbEngine::setupEngine()
m_gdbProc.setWorkingDirectory(rp.debugger.workingDirectory); m_gdbProc.setWorkingDirectory(rp.debugger.workingDirectory);
m_gdbProc.setEnvironment(gdbEnv); m_gdbProc.setEnvironment(gdbEnv);
m_gdbProc.start(); m_gdbProc.start();
}
if (!m_gdbProc.waitForStarted()) { void GdbEngine::handleGdbStarted()
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;
}
showMessage("GDB STARTED, INITIALIZING IT"); showMessage("GDB STARTED, INITIALIZING IT");
runCommand({"show version", CB(handleShowVersion)}); runCommand({"show version", CB(handleShowVersion)});
runCommand({"show debug-file-directory", CB(handleDebugInfoLocation)}); runCommand({"show debug-file-directory", CB(handleDebugInfoLocation)});
@@ -3938,6 +3930,7 @@ void GdbEngine::setupEngine()
showStatusMessage(tr("Setting up inferior...")); showStatusMessage(tr("Setting up inferior..."));
const DebuggerRunParameters &rp = runParameters();
// Addint executable to modules list. // Addint executable to modules list.
Module module; Module module;
module.startAddress = 0; module.startAddress = 0;
@@ -4079,6 +4072,21 @@ void GdbEngine::reloadDebuggingHelpers()
void GdbEngine::handleGdbDone() 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(); const QProcess::ProcessError error = m_gdbProc.error();
if (error != QProcess::UnknownError) { if (error != QProcess::UnknownError) {
QString msg = RunWorker::userMessageForProcessError(error, QString msg = RunWorker::userMessageForProcessError(error,

View File

@@ -111,6 +111,7 @@ private: ////////// General Interface //////////
// The engine is still running just fine, but it failed to acquire a debuggee. // The engine is still running just fine, but it failed to acquire a debuggee.
void notifyInferiorSetupFailedHelper(const QString &msg); void notifyInferiorSetupFailedHelper(const QString &msg);
void handleGdbStarted();
void handleGdbDone(); void handleGdbDone();
void readGdbStandardOutput(); void readGdbStandardOutput();
void readGdbStandardError(); void readGdbStandardError();