else:
eval_result = self.target().EvaluateExpression(expr, options)
- if not eval_result.GetError().Success():
- self.assertTrue(eval_result.GetError().Success(),
- "Unexpected failure with msg: " + eval_result.GetError().GetCString())
+ self.assertSuccess(eval_result.GetError())
if result_type:
self.assertEqual(result_type, eval_result.GetDisplayTypeName())
err = platform.Run(shell_command)
return (err, shell_command.GetStatus(), shell_command.GetOutput())
+ """Assert that an lldb.SBError is in the "success" state."""
+ def assertSuccess(self, obj, msg=None):
+ if not obj.Success():
+ error = obj.GetCString()
+ self.fail(self._formatMessage(msg,
+ "'{}' is not success".format(error)))
+
# =================================================
# Misc. helper methods for debugging test execution
# =================================================
'Stop here in main.', self.main_source_spec)
# Make sure the SIGCHLD behavior is pass/no-stop/no-notify:
- return_obj = lldb.SBCommandReturnObject()
- self.dbg.GetCommandInterpreter().HandleCommand(
- "process handle SIGCHLD -s 0 -p 1 -n 0", return_obj)
- self.assertTrue(return_obj.Succeeded(), "Set SIGCHLD to pass, no-stop")
+ self.runCmd("process handle SIGCHLD -s 0 -p 1 -n 0")
# The sigchld_no variable should be 0 at this point.
self.sigchld_no = target.FindFirstGlobalVariable("sigchld_no")
"call_me (%d)" %
(num_sigchld), options)
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEquals(value.GetValueAsSigned(-1), num_sigchld)
self.check_after_call(num_sigchld)
"call_me (%d)" %
(num_sigchld), options)
- self.assertTrue(value.IsValid() and value.GetError().Success())
+ self.assertTrue(value.IsValid())
+ self.assertSuccess(value.GetError())
self.assertEquals(value.GetValueAsSigned(-1), num_sigchld)
self.check_after_call(num_sigchld)
# Now set the signal to print but not stop and make sure that calling
# still works:
- self.dbg.GetCommandInterpreter().HandleCommand(
- "process handle SIGCHLD -s 0 -p 1 -n 1", return_obj)
- self.assertTrue(
- return_obj.Succeeded(),
- "Set SIGCHLD to pass, no-stop, notify")
+ self.runCmd("process handle SIGCHLD -s 0 -p 1 -n 1")
value = frame.EvaluateExpression(
"call_me (%d)" %
(num_sigchld), options)
- self.assertTrue(value.IsValid() and value.GetError().Success())
+ self.assertTrue(value.IsValid())
+ self.assertSuccess(value.GetError())
self.assertEquals(value.GetValueAsSigned(-1), num_sigchld)
self.check_after_call(num_sigchld)
"call_me (%d)" %
(num_sigchld), options)
- self.assertTrue(value.IsValid() and value.GetError().Success())
+ self.assertTrue(value.IsValid())
+ self.assertSuccess(value.GetError())
self.assertEquals(value.GetValueAsSigned(-1), num_sigchld)
self.check_after_call(num_sigchld)
# Okay, now set UnwindOnError to true, and then make the signal behavior to stop
# and see that now we do stop at the signal point:
- self.dbg.GetCommandInterpreter().HandleCommand(
- "process handle SIGCHLD -s 1 -p 1 -n 1", return_obj)
- self.assertTrue(
- return_obj.Succeeded(),
- "Set SIGCHLD to pass, stop, notify")
+ self.runCmd("process handle SIGCHLD -s 1 -p 1 -n 1")
value = frame.EvaluateExpression(
"call_me (%d)" %
(num_sigchld), options)
- self.assertTrue(
- value.IsValid() and value.GetError().Success() == False)
+ self.assertTrue(value.IsValid())
+ self.assertFalse(value.GetError().Success())
# Set signal handling back to no-stop, and continue and we should end
# up back in out starting frame:
- self.dbg.GetCommandInterpreter().HandleCommand(
- "process handle SIGCHLD -s 0 -p 1 -n 1", return_obj)
- self.assertTrue(
- return_obj.Succeeded(),
- "Set SIGCHLD to pass, no-stop, notify")
+ self.runCmd("process handle SIGCHLD -s 0 -p 1 -n 1")
error = process.Continue()
- self.assertTrue(
- error.Success(),
+ self.assertSuccess(error,
"Continuing after stopping for signal succeeds.")
frame = self.thread.GetFrameAtIndex(0)
options.SetTrapExceptions(False)
value = frame.EvaluateExpression("[my_class iCatchMyself]", options)
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEquals(value.GetValueAsUnsigned(), 57)
self.check_after_call()
options.SetTrapExceptions(True)
# Test retrieving of an objcClass's property through the self pointer
value = obj_val.EvaluateExpression("self.property")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 2222)
# Test objcClass's methods evaluation through the self pointer
value = obj_val.EvaluateExpression("[self method]")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 3333)
# Test if we can use a computation result reference object correctly
# Test an expression evaluation on it
value = obj_val.EvaluateExpression("1")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
# Test retrieving of a field on it
value = obj_val.EvaluateExpression("field")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 1111)
def setUp(self):
# Test retrieveing of a field (not a local with the same name)
value = obj_val.EvaluateExpression("field")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 1111)
# Test functions evaluation
value = obj_val.EvaluateExpression("function()")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 2222)
# Test that we retrieve the right global
value = obj_val.EvaluateExpression("global.field")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 1111)
#
# Test retrieveing of a field
value = obj_val.EvaluateExpression("field_int")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 5555)
#
# Test retrieveing of an element's field
value = obj_val.GetValueForExpressionPath("[7]").EvaluateExpression("field")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 1111)
#
# Test retrieveing of a dereferenced object's field
value = obj_val.Dereference().EvaluateExpression("field")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 1111)
#
# Test retrieveing of a dereferenced object's field
value = obj_val.Dereference().EvaluateExpression("field")
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEqual(value.GetValueAsSigned(), 1111)
def setUp(self):
# Now use the options:
result = frame.EvaluateExpression("call_me(10)", options)
- self.assertTrue(result.GetError().Success(), "expression succeeded")
+ self.assertSuccess(result.GetError())
self.assertEqual(result.GetValueAsSigned(), 18, "got the right value.")
# Now disallow JIT and make sure it fails:
# And again, make sure this works:
result = frame.EvaluateExpression("call_me(10)", options)
- self.assertTrue(result.GetError().Success(), "expression succeeded")
+ self.assertSuccess(result.GetError())
self.assertEqual(result.GetValueAsSigned(), 18, "got the right value.")
# Try with one error:
value = frame.EvaluateExpression("my_pointer.first", options)
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEquals(value.GetValueAsUnsigned(), 10)
# Try with one error in a top-level expression.
two_error_expression = "my_pointer.second->a"
value = frame.EvaluateExpression(two_error_expression, options)
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
self.assertEquals(value.GetValueAsUnsigned(), 20)
# Try a Fix-It that is stored in the 'note:' diagnostic of an error.
fixit_in_note_expr ="#define ToStr(x) #x\nToStr(0 {, })"
value = frame.EvaluateExpression(fixit_in_note_expr, options)
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success(), value.GetError())
+ self.assertSuccess(value.GetError())
self.assertEquals(value.GetSummary(), '"(0 {, })"')
# Now turn off the fixits, and the expression should fail:
# Make sure we can evaluate a C++11 expression.
val = frame.EvaluateExpression('foo != nullptr')
self.assertTrue(val.IsValid())
- self.assertTrue(val.GetError().Success())
+ self.assertSuccess(val.GetError())
self.DebugSBValue(val)
# Make sure it still works if language is set to C++11:
options.SetLanguage(lldb.eLanguageTypeC_plus_plus_11)
val = frame.EvaluateExpression('foo != nullptr', options)
self.assertTrue(val.IsValid())
- self.assertTrue(val.GetError().Success())
+ self.assertSuccess(val.GetError())
self.DebugSBValue(val)
# Make sure it fails if language is set to C:
options.SetLanguage(lldb.eLanguageTypeC_plus_plus_11)
val = frame.EvaluateExpression('id == 0', options)
self.assertTrue(val.IsValid())
- self.assertTrue(val.GetError().Success())
+ self.assertSuccess(val.GetError())
self.DebugSBValue(val)
# Make sure we can't retrieve `id` variable if language is set to ObjC:
"""
self.build()
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ lldbutil.run_to_source_breakpoint(self,
'// Break here', self.main_source_spec)
- frame = thread.GetFrameAtIndex(0)
- value = frame.EvaluateExpression("a.test_abi_tag()")
- self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
- self.assertEqual(value.GetValueAsSigned(0), 1)
-
- value = frame.EvaluateExpression("a.test_asm_name()")
- self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
- self.assertEqual(value.GetValueAsSigned(0), 2)
+ self.expect_expr("a.test_abi_tag()", result_value='1')
+ self.expect_expr("a.test_asm_name()", result_value='2')
# Get the number of the last expression:
result = thread.frames[0].EvaluateExpression("call_me(200)")
- self.assertTrue(result.GetError().Success(), "Our expression succeeded")
+ self.assertSuccess(result.GetError(), "Our expression succeeded")
name = result.GetName()
ordinal = int(name[1:])
# The condition evaluation had to run a 4 expressions, but we haven't
# run any user expressions.
result = thread.frames[0].EvaluateExpression("call_me(200)")
- self.assertTrue(result.GetError().Success(), "Our expression succeeded the second time")
+ self.assertSuccess(result.GetError(), "Our expression succeeded the second time")
after_name = result.GetName()
after_ordinal = int(after_name[1:])
self.assertEqual(ordinal + 1, after_ordinal)
self.expect("expr f == Foo::FooBar",
substrs=['(bool) $0 = true'])
- value = frame.EvaluateExpression("f == Foo::FooBar")
- self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
- self.assertEqual(value.GetValueAsUnsigned(), 1)
-
- value = frame.EvaluateExpression("b == BarBar")
- self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
- self.assertEqual(value.GetValueAsUnsigned(), 1)
+ self.expect_expr("f == Foo::FooBar", result_value='true')
+ self.expect_expr("b == BarBar", result_value='true')
## b is not a Foo
value = frame.EvaluateExpression("b == Foo::FooBar")
options.SetTimeoutInMicroSeconds(1000000)
value = frame.EvaluateExpression("wait_a_while (1000)", options)
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
# Now do the same thingwith the command line command, and make sure it
# works too.
options.SetOneThreadTimeoutInMicroSeconds(500000)
value = frame.EvaluateExpression("wait_a_while (1000)", options)
self.assertTrue(value.IsValid())
- self.assertTrue(value.GetError().Success())
+ self.assertSuccess(value.GetError())
main_frame = self.thread.GetFrameAtIndex(0)
val = main_frame.EvaluateExpression("second_function(47)", options)
- self.assertTrue(
- val.GetError().Success(),
- "We did complete the execution.")
+ self.assertSuccess(val.GetError(), "We did complete the execution.")
self.assertEquals(47, val.GetValueAsSigned())
# Now unwind the expression, and make sure we got back to where we
# started.
- error = thread.UnwindInnermostExpression()
- self.assertTrue(error.Success(), "We succeeded in unwinding")
+ self.assertSuccess(thread.UnwindInnermostExpression(),
+ "We succeeded in unwinding")
cur_frame = thread.GetFrameAtIndex(0)
self.assertTrue(
# the bug that expressions with no result currently return False for Success()...
expr = "if (&" + weak_varname + " != NULL) { present_weak_int = 10; } else { present_weak_int = 20;}; 10"
result = self.frame.EvaluateExpression(expr)
- self.assertTrue(result.GetError().Success(), "absent_weak_int expr failed: %s"%(result.GetError().GetCString()))
+ self.assertSuccess(result.GetError(), "absent_weak_int expr failed")
self.assertEqual(value.GetValueAsSigned(), correct_value, "Didn't change present_weak_int correctly.")
def do_test(self):
error = lldb.SBError()
reg_value_fstat_initial = value.GetValueAsUnsigned(error, 0)
- self.assertTrue(error.Success(), "reading a value for fstat")
+ self.assertSuccess(error, "reading a value for fstat")
value = currentFrame.FindValue("ftag", lldb.eValueTypeRegister)
error = lldb.SBError()
reg_value_ftag_initial = value.GetValueAsUnsigned(error, 0)
- self.assertTrue(error.Success(), "reading a value for ftag")
+ self.assertSuccess(error, "reading a value for ftag")
fstat_top_pointer_initial = (reg_value_fstat_initial & 0x3800) >> 11
# Execute 'si' aka 'thread step-inst' instruction 5 times and with
0, # launch flags
True, # stop at entry
error)
- self.assertTrue(error.Success(), "Launch succeeds. Error is :" + str(error))
+ self.assertSuccess(error, "Launch succeeds")
self.assertTrue(
process.GetState() == lldb.eStateStopped,
new_platform = lldb.SBPlatform(lldb.remote_platform.GetName())
self.dbg.SetSelectedPlatform(new_platform)
- interpreter = self.dbg.GetCommandInterpreter()
connect_url = "%s://%s:%s" % (protocol, hostname, str(hostport+1))
- command = "platform connect %s" % (connect_url)
-
- result = lldb.SBCommandReturnObject()
-
# Test the default setting.
- interpreter.HandleCommand("settings show target.auto-install-main-executable", result)
- self.assertTrue(
- result.Succeeded() and
- "target.auto-install-main-executable (boolean) = true" in result.GetOutput(),
- "Default settings for target.auto-install-main-executable failed.: %s - %s" %
- (result.GetOutput(), result.GetError()))
+ self.expect("settings show target.auto-install-main-executable",
+ substrs=["target.auto-install-main-executable (boolean) = true"],
+ msg="Default settings for target.auto-install-main-executable failed.")
# Disable the auto install.
- interpreter.HandleCommand("settings set target.auto-install-main-executable false", result)
- interpreter.HandleCommand("settings show target.auto-install-main-executable", result)
- self.assertTrue(
- result.Succeeded() and
- "target.auto-install-main-executable (boolean) = false" in result.GetOutput(),
- "Default settings for target.auto-install-main-executable failed.: %s - %s" %
- (result.GetOutput(), result.GetError()))
+ self.runCmd("settings set target.auto-install-main-executable false")
+ self.expect("settings show target.auto-install-main-executable",
+ substrs=["target.auto-install-main-executable (boolean) = false"])
- interpreter.HandleCommand("platform select %s"%configuration.lldb_platform_name, result)
- interpreter.HandleCommand(command, result)
-
- self.assertTrue(
- result.Succeeded(),
- "platform process connect failed: %s - %s" %
- (result.GetOutput(),result.GetError()))
+ self.runCmd("platform select %s"%configuration.lldb_platform_name)
+ self.runCmd("platform connect %s" % (connect_url))
# Create the target with the original file.
- interpreter.HandleCommand("target create --remote-file %s %s "%
- (os.path.join(working_dir,dest.GetFilename()), self.getBuildArtifact("a.out")),
- result)
- self.assertTrue(
- result.Succeeded(),
- "platform create failed: %s - %s" %
- (result.GetOutput(),result.GetError()))
+ self.runCmd("target create --remote-file %s %s "%
+ (os.path.join(working_dir,dest.GetFilename()),
+ self.getBuildArtifact("a.out")))
target = new_debugger.GetSelectedTarget()
breakpoint = target.BreakpointCreateByName("main")
frame = thread.GetFrameAtIndex(0)
self.assertEqual(frame.GetFunction().GetName(), "main")
- interpreter.HandleCommand("target variable build", result)
- self.assertTrue(
- result.Succeeded() and
- '"device"' in result.GetOutput(),
- "Magic in the binary is wrong: %s " % result.GetOutput())
+ self.expect("target variable build", substrs=['"device"'],
+ msg="Magic in the binary is wrong")
process.Continue()
target.ConnectRemote(listener, None, None, error)
process = target.AttachToProcessWithName(listener, name, False, error)
- self.assertTrue(error.Success() and process, PROCESS_IS_VALID)
+ self.assertSuccess(error)
+ self.assertTrue(process, PROCESS_IS_VALID)
# Verify that after attach, our selected target indeed matches name.
self.expect(