[Lldb-commits] [lldb] 8ac0aaa - [lldb] Improve user expression diagnostics (#123242)

via lldb-commits lldb-commits at lists.llvm.org
Thu Jan 16 16:09:24 PST 2025


Author: Jonas Devlieghere
Date: 2025-01-16T16:09:20-08:00
New Revision: 8ac0aaaebbbb38d3dc863c5c5b331c8ec3238e27

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

LOG: [lldb] Improve user expression diagnostics (#123242)

This patch rewords some of the user expression diagnostics.

 - Differentiate between being interrupted and hitting a breakpoint.
- Use "expression execution" to make it more obvious that the diagnostic
is associated with the user expression.
 - Consistently use a colon instead of semicolons and commas.

rdar://143059974

Added: 
    

Modified: 
    lldb/source/Expression/LLVMUserExpression.cpp
    lldb/test/API/commands/expression/call-function/TestCallStopAndContinue.py
    lldb/test/API/commands/expression/unwind_expression/TestUnwindExpression.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Expression/LLVMUserExpression.cpp b/lldb/source/Expression/LLVMUserExpression.cpp
index 529ac462dfd8f4..fac3ce6f5799d5 100644
--- a/lldb/source/Expression/LLVMUserExpression.cpp
+++ b/lldb/source/Expression/LLVMUserExpression.cpp
@@ -187,18 +187,22 @@ LLVMUserExpression::DoExecute(DiagnosticManager &diagnostic_manager,
     if (execution_result == lldb::eExpressionInterrupted ||
         execution_result == lldb::eExpressionHitBreakpoint) {
       const char *error_desc = nullptr;
+      const char *explanation = execution_result == lldb::eExpressionInterrupted
+                                    ? "was interrupted"
+                                    : "hit a breakpoint";
 
       if (user_expression_plan) {
         if (auto real_stop_info_sp = user_expression_plan->GetRealStopInfo())
           error_desc = real_stop_info_sp->GetDescription();
       }
+
       if (error_desc)
         diagnostic_manager.Printf(lldb::eSeverityError,
-                                  "Execution was interrupted, reason: %s.",
+                                  "Expression execution %s: %s.", explanation,
                                   error_desc);
       else
-        diagnostic_manager.PutString(lldb::eSeverityError,
-                                     "Execution was interrupted.");
+        diagnostic_manager.Printf(lldb::eSeverityError,
+                                  "Expression execution %s.", explanation);
 
       if ((execution_result == lldb::eExpressionInterrupted &&
            options.DoesUnwindOnError()) ||
@@ -212,31 +216,35 @@ LLVMUserExpression::DoExecute(DiagnosticManager &diagnostic_manager,
           user_expression_plan->TransferExpressionOwnership();
         diagnostic_manager.AppendMessageToDiagnostic(
             "The process has been left at the point where it was "
-            "interrupted, "
-            "use \"thread return -x\" to return to the state before "
-            "expression evaluation.");
+            "interrupted, use \"thread return -x\" to return to the state "
+            "before expression evaluation.");
       }
 
       return execution_result;
-    } else if (execution_result == lldb::eExpressionStoppedForDebug) {
+    }
+
+    if (execution_result == lldb::eExpressionStoppedForDebug) {
       diagnostic_manager.PutString(
           lldb::eSeverityInfo,
-          "Execution was halted at the first instruction of the expression "
-          "function because \"debug\" was requested.\n"
+          "Expression execution was halted at the first instruction of the "
+          "expression function because \"debug\" was requested.\n"
           "Use \"thread return -x\" to return to the state before expression "
           "evaluation.");
       return execution_result;
-    } else if (execution_result == lldb::eExpressionThreadVanished) {
-      diagnostic_manager.Printf(
-          lldb::eSeverityError,
-          "Couldn't complete execution; the thread "
-          "on which the expression was being run: 0x%" PRIx64
-          " exited during its execution.",
-          expr_thread_id);
+    }
+
+    if (execution_result == lldb::eExpressionThreadVanished) {
+      diagnostic_manager.Printf(lldb::eSeverityError,
+                                "Couldn't execute expression: the thread on "
+                                "which the expression was being run (0x%" PRIx64
+                                ") exited during its execution.",
+                                expr_thread_id);
       return execution_result;
-    } else if (execution_result != lldb::eExpressionCompleted) {
+    }
+
+    if (execution_result != lldb::eExpressionCompleted) {
       diagnostic_manager.Printf(lldb::eSeverityError,
-                                "Couldn't execute function; result was %s",
+                                "Couldn't execute expression: result was %s",
                                 toString(execution_result).c_str());
       return execution_result;
     }
@@ -245,9 +253,9 @@ LLVMUserExpression::DoExecute(DiagnosticManager &diagnostic_manager,
   if (FinalizeJITExecution(diagnostic_manager, exe_ctx, result,
                            function_stack_bottom, function_stack_top)) {
     return lldb::eExpressionCompleted;
-  } else {
-    return lldb::eExpressionResultUnavailable;
   }
+
+  return lldb::eExpressionResultUnavailable;
 }
 
 bool LLVMUserExpression::FinalizeJITExecution(

diff  --git a/lldb/test/API/commands/expression/call-function/TestCallStopAndContinue.py b/lldb/test/API/commands/expression/call-function/TestCallStopAndContinue.py
index 69f02ec99f64b2..d856b5c23a5eab 100644
--- a/lldb/test/API/commands/expression/call-function/TestCallStopAndContinue.py
+++ b/lldb/test/API/commands/expression/call-function/TestCallStopAndContinue.py
@@ -31,7 +31,7 @@ def test(self):
         self.expect(
             "expr -i false -- returnsFive()",
             error=True,
-            substrs=["Execution was interrupted, reason: breakpoint"],
+            substrs=["Expression execution hit a breakpoint: breakpoint"],
         )
 
         self.runCmd("continue", "Continue completed")

diff  --git a/lldb/test/API/commands/expression/unwind_expression/TestUnwindExpression.py b/lldb/test/API/commands/expression/unwind_expression/TestUnwindExpression.py
index 82f062876a773f..c61fe5d01fd5b5 100644
--- a/lldb/test/API/commands/expression/unwind_expression/TestUnwindExpression.py
+++ b/lldb/test/API/commands/expression/unwind_expression/TestUnwindExpression.py
@@ -2,7 +2,6 @@
 Test stopping at a breakpoint in an expression, and unwinding from there.
 """
 
-
 import lldb
 from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *
@@ -71,7 +70,7 @@ def do_unwind_test(self, thread, bkpt, timeout):
         self.assertTrue(val.GetError().Fail(), "We did not complete the execution.")
         error_str = val.GetError().GetCString()
         self.assertIn(
-            "Execution was interrupted, reason: breakpoint",
+            "Expression execution hit a breakpoint: breakpoint",
             error_str,
             "And the reason was right.",
         )


        


More information about the lldb-commits mailing list