From 15f34ff2d8976f9211c6112531355ed5e2a92ea0 Mon Sep 17 00:00:00 2001 From: Raphael Isemann Date: Wed, 1 Apr 2020 09:39:14 +0200 Subject: [PATCH] [lldb] Allow expect_expr without a running target 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 | 7 +++++-- .../expression/call-function/TestCallBuiltinFunction.py | 16 +--------------- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py index 966d460..5058594 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbtest.py +++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -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(), diff --git a/lldb/test/API/commands/expression/call-function/TestCallBuiltinFunction.py b/lldb/test/API/commands/expression/call-function/TestCallBuiltinFunction.py index 3147888..55ba271 100644 --- a/lldb/test/API/commands/expression/call-function/TestCallBuiltinFunction.py +++ b/lldb/test/API/commands/expression/call-function/TestCallBuiltinFunction.py @@ -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") -- 2.7.4