From 91d1ed25c2081d619b60ed9585e61f15a2a353aa Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 17 Jun 2022 12:59:27 +0200 Subject: [PATCH] LldbEngine: Connect to done() signal Instead of connecting to errorOccurred() and finished() signals. Change-Id: If82a7c79bba9bd3457d07fbc212f6b007699b0f0 Reviewed-by: hjk --- src/plugins/debugger/lldb/lldbengine.cpp | 39 ++++++++---------------- src/plugins/debugger/lldb/lldbengine.h | 4 +-- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 8bcd5112305..cb8f0909d3d 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -92,21 +92,14 @@ LldbEngine::LldbEngine() setDebuggerName("LLDB"); DebuggerSettings &ds = *debuggerSettings(); - connect(&ds.autoDerefPointers, &BaseAspect::changed, - this, &LldbEngine::updateLocals); + connect(&ds.autoDerefPointers, &BaseAspect::changed, this, &LldbEngine::updateLocals); connect(ds.createFullBacktrace.action(), &QAction::triggered, this, &LldbEngine::fetchFullBacktrace); - connect(&ds.useDebuggingHelpers, &BaseAspect::changed, - this, &LldbEngine::updateLocals); - connect(&ds.useDynamicType, &BaseAspect::changed, - this, &LldbEngine::updateLocals); - connect(&ds.intelFlavor, &BaseAspect::changed, - this, &LldbEngine::updateAll); + connect(&ds.useDebuggingHelpers, &BaseAspect::changed, this, &LldbEngine::updateLocals); + connect(&ds.useDynamicType, &BaseAspect::changed, this, &LldbEngine::updateLocals); + connect(&ds.intelFlavor, &BaseAspect::changed, this, &LldbEngine::updateAll); - connect(&m_lldbProc, &QtcProcess::errorOccurred, - this, &LldbEngine::handleLldbError); - connect(&m_lldbProc, &QtcProcess::finished, - this, &LldbEngine::handleLldbFinished); + connect(&m_lldbProc, &QtcProcess::done, this, &LldbEngine::handleLldbDone); connect(&m_lldbProc, &QtcProcess::readyReadStandardOutput, this, &LldbEngine::readLldbStandardOutput); connect(&m_lldbProc, &QtcProcess::readyReadStandardError, @@ -116,11 +109,6 @@ LldbEngine::LldbEngine() this, &LldbEngine::handleResponse, Qt::QueuedConnection); } -LldbEngine::~LldbEngine() -{ - m_lldbProc.disconnect(); -} - void LldbEngine::executeDebuggerCommand(const QString &command) { DebuggerCommand cmd("executeDebuggerCommand"); @@ -782,12 +770,17 @@ void LldbEngine::doUpdateLocals(const UpdateParameters ¶ms) runCommand(cmd); } -void LldbEngine::handleLldbError(QProcess::ProcessError error) +void LldbEngine::handleLldbDone() { + if (m_lldbProc.error() == QProcess::UnknownError) { + notifyDebuggerProcessFinished(m_lldbProc.resultData(), "LLDB"); + return; + } + + const QProcess::ProcessError error = m_lldbProc.error(); showMessage(QString("LLDB PROCESS ERROR: %1").arg(error)); switch (error) { case QProcess::Crashed: - m_lldbProc.disconnect(); notifyEngineShutdownFinished(); break; // will get a processExited() as well // impossible case QProcess::FailedToStart: @@ -796,7 +789,6 @@ void LldbEngine::handleLldbError(QProcess::ProcessError error) case QProcess::Timedout: default: //setState(EngineShutdownRequested, true); - m_lldbProc.stop(); AsynchronousMessageBox::critical(tr("LLDB I/O Error"), errorMessage(error)); break; } @@ -829,11 +821,6 @@ QString LldbEngine::errorMessage(QProcess::ProcessError error) const } } -void LldbEngine::handleLldbFinished() -{ - notifyDebuggerProcessFinished(m_lldbProc.resultData(), "LLDB"); -} - void LldbEngine::readLldbStandardError() { QString err = QString::fromUtf8(m_lldbProc.readAllStandardError()); @@ -921,7 +908,7 @@ void LldbEngine::handleStateNotification(const GdbMi &item) void LldbEngine::handleLocationNotification(const GdbMi &reportedLocation) { qulonglong address = reportedLocation["address"].toAddress(); - Utils::FilePath fileName = FilePath::fromUserInput(reportedLocation["file"].data()); + FilePath fileName = FilePath::fromUserInput(reportedLocation["file"].data()); QString function = reportedLocation["function"].data(); int lineNumber = reportedLocation["line"].toInt(); Location loc = Location(fileName, lineNumber); diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h index 0e7e60bb713..7562eb98e24 100644 --- a/src/plugins/debugger/lldb/lldbengine.h +++ b/src/plugins/debugger/lldb/lldbengine.h @@ -53,7 +53,6 @@ class LldbEngine : public CppDebuggerEngine public: LldbEngine(); - ~LldbEngine() override; signals: void outputReady(const QString &data); @@ -111,8 +110,7 @@ private: QString errorMessage(QProcess::ProcessError error) const; bool hasCapability(unsigned cap) const override; - void handleLldbFinished(); - void handleLldbError(QProcess::ProcessError error); + void handleLldbDone(); void readLldbStandardOutput(); void readLldbStandardError();