https://github.com/oltolm updated https://github.com/llvm/llvm-project/pull/119103
>From 128431de6ef396105507e5666cb0f2b50f8f69db Mon Sep 17 00:00:00 2001 From: oltolm <oleg.tolmat...@gmail.com> Date: Sat, 7 Dec 2024 17:24:07 +0100 Subject: [PATCH] lldb: do not show misleading error when there is no frame --- lldb/source/API/SBFrame.cpp | 33 ++++++------------- .../python_api/run_locker/TestRunLocker.py | 4 +-- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/lldb/source/API/SBFrame.cpp b/lldb/source/API/SBFrame.cpp index 2300bec4d685d2..327e6851ec86a7 100644 --- a/lldb/source/API/SBFrame.cpp +++ b/lldb/source/API/SBFrame.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -#include <algorithm> #include <set> #include <string> @@ -18,11 +17,8 @@ #include "lldb/Core/Address.h" #include "lldb/Core/Debugger.h" #include "lldb/Expression/ExpressionVariable.h" -#include "lldb/Expression/UserExpression.h" -#include "lldb/Host/Host.h" #include "lldb/Symbol/Block.h" #include "lldb/Symbol/Function.h" -#include "lldb/Symbol/Symbol.h" #include "lldb/Symbol/SymbolContext.h" #include "lldb/Symbol/Variable.h" #include "lldb/Symbol/VariableList.h" @@ -33,7 +29,6 @@ #include "lldb/Target/StackFrameRecognizer.h" #include "lldb/Target/StackID.h" #include "lldb/Target/Target.h" -#include "lldb/Target/Thread.h" #include "lldb/Utility/ConstString.h" #include "lldb/Utility/Instrumentation.h" #include "lldb/Utility/LLDBLog.h" @@ -43,7 +38,6 @@ #include "lldb/ValueObject/ValueObjectVariable.h" #include "lldb/API/SBAddress.h" -#include "lldb/API/SBDebugger.h" #include "lldb/API/SBExpressionOptions.h" #include "lldb/API/SBFormat.h" #include "lldb/API/SBStream.h" @@ -1012,33 +1006,26 @@ bool SBFrame::GetDescription(SBStream &description) { SBValue SBFrame::EvaluateExpression(const char *expr) { LLDB_INSTRUMENT_VA(this, expr); - SBValue result; std::unique_lock<std::recursive_mutex> lock; ExecutionContext exe_ctx(m_opaque_sp.get(), lock); StackFrame *frame = exe_ctx.GetFramePtr(); Target *target = exe_ctx.GetTargetPtr(); + SBExpressionOptions options; if (frame && target) { - SBExpressionOptions options; lldb::DynamicValueType fetch_dynamic_value = frame->CalculateTarget()->GetPreferDynamicValue(); options.SetFetchDynamicValue(fetch_dynamic_value); - options.SetUnwindOnError(true); - options.SetIgnoreBreakpoints(true); - SourceLanguage language = target->GetLanguage(); - if (!language) - language = frame->GetLanguage(); - options.SetLanguage((SBSourceLanguageName)language.name, language.version); - return EvaluateExpression(expr, options); - } else { - Status error; - error = Status::FromErrorString("can't evaluate expressions when the " - "process is running."); - ValueObjectSP error_val_sp = - ValueObjectConstResult::Create(nullptr, std::move(error)); - result.SetSP(error_val_sp, false); } - return result; + options.SetUnwindOnError(true); + options.SetIgnoreBreakpoints(true); + SourceLanguage language; + if (target) + language = target->GetLanguage(); + if (!language && frame) + language = frame->GetLanguage(); + options.SetLanguage((SBSourceLanguageName)language.name, language.version); + return EvaluateExpression(expr, options); } SBValue diff --git a/lldb/test/API/python_api/run_locker/TestRunLocker.py b/lldb/test/API/python_api/run_locker/TestRunLocker.py index d525bbf6b406f1..b7b4941214e863 100644 --- a/lldb/test/API/python_api/run_locker/TestRunLocker.py +++ b/lldb/test/API/python_api/run_locker/TestRunLocker.py @@ -107,6 +107,4 @@ def runlocker_test(self, stop_at_entry): "script var = lldb.frame.EvaluateExpression('SomethingToCall()'); var.GetError().GetCString()", result, ) - self.assertIn( - "can't evaluate expressions when the process is running", result.GetOutput() - ) + self.assertIn("sbframe object is not valid", result.GetOutput()) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits