https://github.com/adrian-prantl updated https://github.com/llvm/llvm-project/pull/119757
>From 9a4f8c4b3a9953a5f59bd58f538281a0f194473f Mon Sep 17 00:00:00 2001 From: Adrian Prantl <apra...@apple.com> Date: Thu, 12 Dec 2024 12:53:13 -0800 Subject: [PATCH] [lldb] Add a progress event for executing an expression Expressions can take arbitrary amounts of time to run, so IDEs might want to be informed about the fact that an expression is currently being executed. rdar://141253078 --- lldb/source/Expression/FunctionCaller.cpp | 5 +++++ lldb/source/Expression/UserExpression.cpp | 13 +++++++++++++ lldb/test/Shell/Expr/TestExecProgress.test | 6 ++++++ 3 files changed, 24 insertions(+) create mode 100644 lldb/test/Shell/Expr/TestExecProgress.test diff --git a/lldb/source/Expression/FunctionCaller.cpp b/lldb/source/Expression/FunctionCaller.cpp index 67f9cd5758be2c..ddf1e1151bdcf9 100644 --- a/lldb/source/Expression/FunctionCaller.cpp +++ b/lldb/source/Expression/FunctionCaller.cpp @@ -8,6 +8,7 @@ #include "lldb/Expression/FunctionCaller.h" #include "lldb/Core/Module.h" +#include "lldb/Core/Progress.h" #include "lldb/Expression/DiagnosticManager.h" #include "lldb/Expression/IRExecutionUnit.h" #include "lldb/Interpreter/CommandReturnObject.h" @@ -338,6 +339,10 @@ lldb::ExpressionResults FunctionCaller::ExecuteFunction( DiagnosticManager &diagnostic_manager, Value &results) { lldb::ExpressionResults return_value = lldb::eExpressionSetupError; + Debugger *debugger = + exe_ctx.GetTargetPtr() ? &exe_ctx.GetTargetPtr()->GetDebugger() : nullptr; + Progress progress("Calling function", FunctionName(), {}, debugger); + // FunctionCaller::ExecuteFunction execution is always just to get the // result. Unless explicitly asked for, ignore breakpoints and unwind on // error. diff --git a/lldb/source/Expression/UserExpression.cpp b/lldb/source/Expression/UserExpression.cpp index f1f69ae1c89b85..af4b477660eeb5 100644 --- a/lldb/source/Expression/UserExpression.cpp +++ b/lldb/source/Expression/UserExpression.cpp @@ -14,6 +14,7 @@ #include <string> #include "lldb/Core/Module.h" +#include "lldb/Core/Progress.h" #include "lldb/Expression/DiagnosticManager.h" #include "lldb/Expression/ExpressionVariable.h" #include "lldb/Expression/IRExecutionUnit.h" @@ -424,6 +425,18 @@ UserExpression::Execute(DiagnosticManager &diagnostic_manager, const EvaluateExpressionOptions &options, lldb::UserExpressionSP &shared_ptr_to_me, lldb::ExpressionVariableSP &result_var) { + Debugger *debugger = + exe_ctx.GetTargetPtr() ? &exe_ctx.GetTargetPtr()->GetDebugger() : nullptr; + std::string details; + if (m_options.IsForUtilityExpr()) + details = "LLDB utility"; + else if (m_expr_text.size() > 15) + details = m_expr_text.substr(0, 14) + "…"; + else + details = m_expr_text; + + Progress progress("Running expression", details, {}, debugger); + lldb::ExpressionResults expr_result = DoExecute( diagnostic_manager, exe_ctx, options, shared_ptr_to_me, result_var); Target *target = exe_ctx.GetTargetPtr(); diff --git a/lldb/test/Shell/Expr/TestExecProgress.test b/lldb/test/Shell/Expr/TestExecProgress.test new file mode 100644 index 00000000000000..93a8469f18ce06 --- /dev/null +++ b/lldb/test/Shell/Expr/TestExecProgress.test @@ -0,0 +1,6 @@ +# RUN: %lldb -s %s | FileCheck %s +log enable lldb event +expr 1 +quit + +# CHECK: {{title = "Running expression", details = "1}} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits