LldbEngine: 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: I2c2eb14bf2948c23bae1e35a7581f52d25ab1dd4
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2022-06-22 06:36:37 +02:00
parent 8066ce8a6f
commit 37a820f67a
2 changed files with 14 additions and 9 deletions

View File

@@ -99,6 +99,7 @@ LldbEngine::LldbEngine()
connect(&ds.useDynamicType, &BaseAspect::changed, this, &LldbEngine::updateLocals); connect(&ds.useDynamicType, &BaseAspect::changed, this, &LldbEngine::updateLocals);
connect(&ds.intelFlavor, &BaseAspect::changed, this, &LldbEngine::updateAll); connect(&ds.intelFlavor, &BaseAspect::changed, this, &LldbEngine::updateAll);
connect(&m_lldbProc, &QtcProcess::started, this, &LldbEngine::handleLldbStarted);
connect(&m_lldbProc, &QtcProcess::done, this, &LldbEngine::handleLldbDone); connect(&m_lldbProc, &QtcProcess::done, this, &LldbEngine::handleLldbDone);
connect(&m_lldbProc, &QtcProcess::readyReadStandardOutput, connect(&m_lldbProc, &QtcProcess::readyReadStandardOutput,
this, &LldbEngine::readLldbStandardOutput); this, &LldbEngine::readLldbStandardOutput);
@@ -230,16 +231,10 @@ void LldbEngine::setupEngine()
m_lldbProc.setCommand(CommandLine(lldbCmd)); m_lldbProc.setCommand(CommandLine(lldbCmd));
m_lldbProc.start(); m_lldbProc.start();
if (!m_lldbProc.waitForStarted()) {
const QString msg = tr("Unable to start LLDB \"%1\": %2")
.arg(lldbCmd.toUserOutput(), m_lldbProc.errorString());
notifyEngineSetupFailed();
showMessage("ADAPTER START FAILED");
if (!msg.isEmpty())
ICore::showWarningWithOptions(adapterStartFailed(), msg);
return;
} }
void LldbEngine::handleLldbStarted()
{
m_lldbProc.waitForReadyRead(1000); m_lldbProc.waitForReadyRead(1000);
showStatusMessage(tr("Setting up inferior...")); showStatusMessage(tr("Setting up inferior..."));
@@ -788,6 +783,15 @@ void LldbEngine::doUpdateLocals(const UpdateParameters &params)
void LldbEngine::handleLldbDone() void LldbEngine::handleLldbDone()
{ {
if (m_lldbProc.result() == ProcessResult::StartFailed) {
notifyEngineSetupFailed();
showMessage("ADAPTER START FAILED");
ICore::showWarningWithOptions(adapterStartFailed(), tr("Unable to start LLDB \"%1\": %2")
.arg(runParameters().debugger.command.executable().toUserOutput(),
m_lldbProc.errorString()));
return;
}
if (m_lldbProc.error() == QProcess::UnknownError) { if (m_lldbProc.error() == QProcess::UnknownError) {
notifyDebuggerProcessFinished(m_lldbProc.resultData(), "LLDB"); notifyDebuggerProcessFinished(m_lldbProc.resultData(), "LLDB");
return; return;

View File

@@ -110,6 +110,7 @@ private:
QString errorMessage(QProcess::ProcessError error) const; QString errorMessage(QProcess::ProcessError error) const;
bool hasCapability(unsigned cap) const override; bool hasCapability(unsigned cap) const override;
void handleLldbStarted();
void handleLldbDone(); void handleLldbDone();
void readLldbStandardOutput(); void readLldbStandardOutput();
void readLldbStandardError(); void readLldbStandardError();