Author: Ebuka Ezike
Date: 2026-08-30T11:52:43+01:00
New Revision: e828491f47d9fa464baaf373ef9847687db427dc

URL: 
https://github.com/llvm/llvm-project/commit/e828491f47d9fa464baaf373ef9847687db427dc
DIFF: 
https://github.com/llvm/llvm-project/commit/e828491f47d9fa464baaf373ef9847687db427dc.diff

LOG: [lldb-dap] Return an error on evaluation failure (#219245)

We currently return an error response a command doesn't exist. We should
do the same when a command fails. This allow the client differentiate
failed commands and hint them properly.

Added: 
    

Modified: 
    lldb/test/API/tools/lldb-dap/send-event/TestDAP_sendEvent.py
    lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/tools/lldb-dap/send-event/TestDAP_sendEvent.py 
b/lldb/test/API/tools/lldb-dap/send-event/TestDAP_sendEvent.py
index 0045cdec6a90d..d7370f6017c23 100644
--- a/lldb/test/API/tools/lldb-dap/send-event/TestDAP_sendEvent.py
+++ b/lldb/test/API/tools/lldb-dap/send-event/TestDAP_sendEvent.py
@@ -66,9 +66,10 @@ def test_send_internal_event(self):
         process_event = session.launch(LaunchArgs(program, stopOnEntry=True))
 
         session.verify_stopped_on_entry(after=process_event)
-        expr_resp = session.do_evaluate("`lldb-dap send-event 
stopped").result()
+        error_resp = session.do_evaluate("`lldb-dap send-event 
stopped").error()
 
+        error = self.expect_not_none(error_resp.body and error_resp.body.error)
         self.assertRegex(
-            expr_resp.body.result,
+            error.format,
             r"Invalid use of lldb-dap send-event, event \"stopped\" should be 
handled by lldb-dap internally.",
         )

diff  --git a/lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp 
b/lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp
index 878905ed5adc2..fa305825eafb6 100644
--- a/lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp
+++ b/lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp
@@ -15,11 +15,15 @@
 #include "Protocol/ProtocolRequests.h"
 #include "Protocol/ProtocolTypes.h"
 #include "RequestHandler.h"
+#include "lldb/API/SBCommandInterpreter.h"
+#include "lldb/API/SBCommandReturnObject.h"
+#include "lldb/API/SBExecutionContext.h"
 #include "lldb/lldb-enumerations.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Error.h"
 
 using namespace llvm;
+using namespace lldb;
 using namespace lldb_dap;
 using namespace lldb_dap::protocol;
 
@@ -91,11 +95,20 @@ EvaluateRequestHandler::Run(const EvaluateArguments 
&arguments) const {
       dap.focus_tid = frame.GetThread().GetThreadID();
     }
 
-    bool required_command_failed = false;
-    body.result = RunLLDBCommands(
-        dap.debugger, dap.GetAPIMutex(), llvm::StringRef(), {expression},
-        required_command_failed,
-        /*parse_command_directives=*/false, /*echo_commands=*/false);
+    SBCommandInterpreter interp = dap.debugger.GetCommandInterpreter();
+    auto ctx = frame ? SBExecutionContext(frame) : SBExecutionContext();
+    SBCommandReturnObject result{};
+    interp.HandleCommand(expression.c_str(), ctx, result,
+                         /*add_to_history=*/true);
+
+    if (!result.Succeeded()) {
+      return llvm::make_error<DAPError>(
+          std::string(result.GetError(), result.GetErrorSize()),
+          /**error_code=*/llvm::inconvertibleErrorCode(),
+          /**show_user= */ false);
+    }
+
+    body.result = std::string(result.GetOutput(), result.GetOutputSize());
     return body;
   }
 


        
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to