[lldb] Allow expect_expr without a running target
authorRaphael Isemann <teemperor@gmail.com>
Wed, 1 Apr 2020 07:39:14 +0000 (09:39 +0200)
committerRaphael Isemann <teemperor@gmail.com>
Wed, 1 Apr 2020 07:39:24 +0000 (09:39 +0200)
Summary:
If we don't have a current frame then we can still run many expressions
as long as we have an active target. With this patch `expect_expr` directly
calls the target's EvaluateExpression function when there is no current frame.

Reviewers: labath

Reviewed By: labath

Subscribers: JDevlieghere

Differential Revision: https://reviews.llvm.org/D77197

lldb/packages/Python/lldbsuite/test/lldbtest.py
lldb/test/API/commands/expression/call-function/TestCallBuiltinFunction.py

index 966d460..5058594 100644 (file)
@@ -2414,9 +2414,12 @@ FileCheck output:
 
         # Set the usual default options for normal expressions.
         options.SetIgnoreBreakpoints(True)
-        options.SetLanguage(frame.GuessLanguage())
 
-        eval_result = frame.EvaluateExpression(expr, options)
+        if self.frame().IsValid():
+          options.SetLanguage(frame.GuessLanguage())
+          eval_result = self.frame().EvaluateExpression(expr, options)
+        else:
+          eval_result = self.target().EvaluateExpression(expr, options)
 
         if not eval_result.GetError().Success():
             self.assertTrue(eval_result.GetError().Success(),
index 3147888..55ba271 100644 (file)
@@ -17,24 +17,10 @@ class ExprCommandCallBuiltinFunction(TestBase):
     # Builtins are expanded by Clang, so debug info shouldn't matter.
     NO_DEBUG_INFO_TESTCASE = True
 
-    def setUp(self):
-        TestBase.setUp(self)
-        # Find the line number to break for main.c.
-        self.line = line_number(
-            'main.cpp',
-            '// Please test these expressions while stopped at this line:')
-
     def test(self):
         self.build()
 
-        # Set breakpoint in main and run exe
-        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
-        lldbutil.run_break_set_by_file_and_line(
-            self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True)
-
-        self.runCmd("run", RUN_SUCCEEDED)
-
-        # Test different builtin functions.
+        target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
 
         self.expect_expr("__builtin_isinf(0.0f)", result_type="int", result_value="0")
         self.expect_expr("__builtin_isnormal(0.0f)", result_type="int", result_value="0")