mydir = TestBase.compute_mydir(__file__)
- # This test case fails non-deterministically.
+ # This test case fails non-deterministically.
@skipIfNoSBHeaders
@expectedFailureAll(bugnumber="llvm.org/pr20282")
def test_multiple_debuggers(self):
class SBBreakpointCallbackCase(TestBase):
NO_DEBUG_INFO_TESTCASE = True
-
+
def setUp(self):
TestBase.setUp(self)
self.generateSource('driver.cpp')
if targets.GetItemAtIndex(i).GetStringValue(99) == target:
found = True
break
-
+
return unittest2.skipIf(not found, "requires " + target)
# Call sysctl on darwin to see if a specified hardware feature is available on this machine.
# Calling this function now succeeds, but we follow the typedef return type through to
# const char *, and thus don't invoke the Summary formatter.
- # clang's libstdc++ on ios arm64 inlines std::string::c_str() always;
+ # clang's libstdc++ on ios arm64 inlines std::string::c_str() always;
# skip this part of the test.
triple = self.dbg.GetSelectedPlatform().GetTriple()
do_cstr_test = True
"Restored the zeroth frame correctly")
def call_function(self):
- (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'Stop here in main.', self.main_source_spec)
# Make sure the SIGCHLD behavior is pass/no-stop/no-notify:
def call_function(self):
"""Test calling function that throws."""
- (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'I am about to throw.', self.main_source_spec)
options = lldb.SBExpressionOptions()
"""These basic expression commands should work as expected."""
self.build(dictionary=dictionary)
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'// Break here', self.main_source_spec)
frame = thread.GetFrameAtIndex(0)
def try_expressions(self):
"""Test calling expressions with errors that can be fixed by the FixIts."""
- (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'Stop here to evaluate expressions', self.main_source_spec)
options = lldb.SBExpressionOptions()
"""valobj.AddressOf() should return correct values."""
self.build()
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
- 'Set breakpoint here.',
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ 'Set breakpoint here.',
lldb.SBFileSpec("main.cpp", False))
self.runCmd("command script import --allow-reload s11588.py")
self.runCmd(
"""
self.build()
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'// Break here', self.main_source_spec)
frame = thread.GetFrameAtIndex(0)
def enumerateJITFiles(self):
return [f for f in os.listdir(self.getBuildDir()) if f.startswith("jit")]
-
+
def countJITFiles(self):
return len(self.enumerateJITFiles())
os.chdir(self.getBuildDir())
src_file = "main.c"
src_file_spec = lldb.SBFileSpec(src_file)
-
+
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "break", src_file_spec)
def build_and_run_to_bkpt(self):
self.build()
- (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, self.thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
"// Set a breakpoint here to get started", self.main_spec)
# Next set a breakpoint in this function, set up Expression options to stop on
"""Printing an xvalue should work."""
self.build(dictionary=dictionary)
- (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
'// Break here', self.main_source_spec)
frame = thread.GetFrameAtIndex(0)
def address_breakpoints(self):
"""Test that breakpoints set on a bad address say they are bad."""
target, process, thread, bkpt = \
- lldbutil.run_to_source_breakpoint(self,
+ lldbutil.run_to_source_breakpoint(self,
"Set a breakpoint here",
lldb.SBFileSpec("main.c"))
self.build()
self.auto_continue_location()
- def make_target_and_bkpt(self, additional_options=None, num_expected_loc=1,
+ def make_target_and_bkpt(self, additional_options=None, num_expected_loc=1,
pattern="Set a breakpoint here"):
exe = self.getBuildArtifact("a.out")
self.target = self.dbg.CreateTarget(exe)
self.assertTrue(self.target.IsValid(), "Target is not valid")
-
+
extra_options_txt = "--auto-continue 1 "
if additional_options:
extra_options_txt += additional_options
- bpno = lldbutil.run_break_set_by_source_regexp(self, pattern,
- extra_options = extra_options_txt,
+ bpno = lldbutil.run_break_set_by_source_regexp(self, pattern,
+ extra_options = extra_options_txt,
num_expected_locations = num_expected_loc)
return bpno
self.assertTrue(target, "Target %s is not valid"%(exe))
# This should create a breakpoint with 3 locations.
-
+
bkpt = target.BreakpointCreateByLocation("main.c", self.line)
# The breakpoint list should show 3 locations.
self.assertEqual(bkpt.GetNumLocations(), 3, "Wrong number of locations")
-
+
self.expect(
"breakpoint list -f",
"Breakpoint locations shown correctly",
"where = a.out`func_inlined .+unresolved, hit count = 0",
"where = a.out`main .+\[inlined\].+unresolved, hit count = 0"])
- return bkpt
+ return bkpt
def shadowed_bkpt_cond_test(self):
"""Test that options set on the breakpoint and location behave correctly."""
commands = ["AAAAAA", "BBBBBB", "CCCCCC"]
str_list = lldb.SBStringList()
str_list.AppendList(commands, len(commands))
-
+
bkpt.SetCommandLineCommands(str_list)
cmd_list = lldb.SBStringList()
bkpt.GetCommandLineCommands(cmd_list)
bkpt.location[1].GetCommandLineCommands(loc_cmd_list)
loc_list_size = loc_list.GetSize()
-
+
# Check that the location has the right commands:
self.assertEqual(loc_cmd_list.GetSize() , loc_list_size, "Added the right number of commands to location")
for i in range(0,loc_list_size):
self.target = self.dbg.CreateTarget(exe)
self.assertTrue(self.target, VALID_TARGET)
self.main_file_spec = lldb.SBFileSpec(os.path.join(self.getSourceDir(), "main.c"))
-
+
def check_name_in_target(self, bkpt_name):
name_list = lldb.SBStringList()
self.target.GetBreakpointNames(name_list)
found_it = True
break
self.assertTrue(found_it, "Didn't find the name %s in the target's name list:"%(bkpt_name))
-
+
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
matches = bkpt.MatchesName(bkpt_name)
self.assertTrue(matches, "We didn't match the name we just set")
-
+
# Make sure we don't match irrelevant names:
matches = bkpt.MatchesName("NotABreakpoint")
self.assertTrue(not matches, "We matched a name we didn't set.")
# Make sure the name is also in the target:
self.check_name_in_target(bkpt_name)
-
+
# Add another name, make sure that works too:
bkpt.AddName(other_bkpt_name)
bkpt.GetNames(name_list)
num_names = name_list.GetSize()
self.assertTrue(num_names == 1, "Name list has %d items, expected 1."%(num_names))
-
+
name = name_list.GetStringAtIndex(0)
self.assertTrue(name == other_bkpt_name, "Remaining name was: %s expected %s."%(name, other_bkpt_name))
def do_check_using_names(self):
"""Use Python APIs to check names work in place of breakpoint ID's."""
-
+
bkpt = self.target.BreakpointCreateByLocation(self.main_file_spec, 10)
bkpt_name = "ABreakpoint"
other_bkpt_name= "_AnotherBreakpoint"
bp_name.SetAutoContinue(new_auto_continue)
self.assertEqual(bp_name.GetAutoContinue(), new_auto_continue, "Couldn't change auto-continue on the name")
self.assertEqual(bkpt.GetAutoContinue(), new_auto_continue, "Option didn't propagate to the breakpoint.")
-
+
# Now make this same breakpoint name - but from the command line
- cmd_str = "breakpoint name configure %s -o %d -i %d -c '%s' -G %d -t %d -x %d -T '%s' -q '%s' -H '%s'"%(cl_bp_name_string,
- self.is_one_shot,
- self.ignore_count,
- self.condition,
+ cmd_str = "breakpoint name configure %s -o %d -i %d -c '%s' -G %d -t %d -x %d -T '%s' -q '%s' -H '%s'"%(cl_bp_name_string,
+ self.is_one_shot,
+ self.ignore_count,
+ self.condition,
self.auto_continue,
self.tid,
self.tidx,
self.help_string)
for cmd in self.cmd_list:
cmd_str += " -C '%s'"%(cmd)
-
+
self.runCmd(cmd_str, check=True)
# Now look up this name again and check its options:
cl_name = lldb.SBBreakpointName(self.target, cl_bp_name_string)
new_help = "I do something even more interesting"
cl_name.SetHelpString(new_help)
self.assertEqual(new_help, cl_name.GetHelpString(), "SetHelpString didn't")
-
+
# We should have three names now, make sure the target can list them:
name_list = lldb.SBStringList()
self.target.GetBreakpointNames(name_list)
for name_string in [self.bp_name_string, other_bp_name_string, cl_bp_name_string]:
self.assertTrue(name_string in name_list, "Didn't find %s in names"%(name_string))
- # Delete the name from the current target. Make sure that works and deletes the
+ # Delete the name from the current target. Make sure that works and deletes the
# name from the breakpoint as well:
self.target.DeleteBreakpointName(self.bp_name_string)
name_list.Clear()
self.assertTrue(self.bp_name_string not in name_list, "Didn't delete %s from the dummy target"%(self.bp_name_string))
# Also make sure the name got removed from breakpoints holding it:
self.assertFalse(bkpt.MatchesName(self.bp_name_string), "Didn't remove the name from the breakpoint.")
-
+
def check_permission_results(self, bp_name):
self.assertEqual(bp_name.GetAllowDelete(), False, "Didn't set allow delete.")
protected_bkpt = self.target.BreakpointCreateByLocation(self.main_file_spec, 10)
@expectedFailureAndroid
def test_hw_break_set_delete_multi_thread(self):
self.build()
- self.setTearDownCleanup()
+ self.setTearDownCleanup()
self.break_multi_thread('delete')
# LLDB supports hardware breakpoints for arm and aarch64 architectures.
@expectedFailureAndroid
def test_hw_break_set_disable_multi_thread(self):
self.build()
- self.setTearDownCleanup()
+ self.setTearDownCleanup()
self.break_multi_thread('disable')
def setUp(self):
count = 0
while count < 2 :
-
+
self.runCmd("process continue")
# We should be stopped in hw_break_function
# Create the targets we are making breakpoints in and copying them to:
self.orig_target = self.dbg.CreateTarget(exe)
self.assertTrue(self.orig_target, VALID_TARGET)
-
+
self.copy_target = self.dbg.CreateTarget(exe)
self.assertTrue(self.copy_target, VALID_TARGET)
num_source_bps = source_bps.GetSize()
num_copy_bps = copy_bps.GetSize()
self.assertTrue(num_source_bps == num_copy_bps, "Didn't get same number of input and output breakpoints - orig: %d copy: %d"%(num_source_bps, num_copy_bps))
-
+
for i in range(0, num_source_bps):
source_bp = source_bps.GetBreakpointAtIndex(i)
source_desc = lldb.SBStream()
source_bps.Append(self.orig_target.BreakpointCreateByName("blubby", lldb.eFunctionNameTypeAuto, empty_module_list, empty_cu_list))
source_bps.Append(self.orig_target.BreakpointCreateByName("blubby", lldb.eFunctionNameTypeFull, empty_module_list,empty_cu_list))
source_bps.Append(self.orig_target.BreakpointCreateBySourceRegex("dont really care", blubby_file_spec))
-
+
# And some number greater than one:
self.check_equivalence(source_bps)
bkpt.SetOneShot(True)
bkpt.SetThreadID(10)
source_bps.Append(bkpt)
-
+
# Make sure we get one right:
self.check_equivalence(source_bps)
source_bps.Clear()
bkpt.SetThreadID(10)
source_bps.Append(bkpt)
all_bps.Append(bkpt)
-
+
error = lldb.SBError()
error = self.orig_target.BreakpointsWriteToFile(self.bkpts_file_spec, source_bps)
self.assertTrue(error.Success(), "Failed writing breakpoints to file: %s."%(error.GetCString()))
write_bps = lldb.SBBreakpointList(self.orig_target)
bkpt.AddName(good_bkpt_name)
write_bps.Append(bkpt)
-
+
error = lldb.SBError()
error = self.orig_target.BreakpointsWriteToFile(self.bkpts_file_spec, write_bps)
self.assertTrue(error.Success(), "Failed writing breakpoints to file: %s."%(error.GetCString()))
error = self.copy_target.BreakpointsCreateFromFile(self.bkpts_file_spec, names_list, copy_bps)
self.assertTrue(error.Success(), "Failed reading breakpoints from file: %s"%(error.GetCString()))
self.assertTrue(copy_bps.GetSize() == 1, "Found the matching breakpoint.")
-
-
-
-
"""
Test that breakpoints do not affect stepping.
-Check for correct StopReason when stepping to the line with breakpoint
+Check for correct StopReason when stepping to the line with breakpoint
which chould be eStopReasonBreakpoint in general,
-and eStopReasonPlanComplete when breakpoint's condition fails.
+and eStopReasonPlanComplete when breakpoint's condition fails.
"""
from __future__ import print_function
def setUp(self):
TestBase.setUp(self)
-
+
self.build()
exe = self.getBuildArtifact("a.out")
src = lldb.SBFileSpec("main.cpp")
self.line1 = line_number('main.cpp', "breakpoint_1")
self.line4 = line_number('main.cpp', "breakpoint_4")
- self.breakpoint1 = self.target.BreakpointCreateByLocation(src, self.line1)
+ self.breakpoint1 = self.target.BreakpointCreateByLocation(src, self.line1)
self.assertTrue(
self.breakpoint1 and self.breakpoint1.GetNumLocations() == 1,
VALID_BREAKPOINT)
self.thread = lldbutil.get_one_thread_stopped_at_breakpoint(self.process, self.breakpoint1)
self.assertIsNotNone(self.thread, "Didn't stop at breakpoint 1.")
- def test_step_instruction(self):
+ def test_step_instruction(self):
# Count instructions between breakpoint_1 and breakpoint_4
contextList = self.target.FindFunctions('main', lldb.eFunctionNameTypeAuto)
self.assertEquals(contextList.GetSize(), 1)
@skipIf(bugnumber="llvm.org/pr31972", hostoslist=["windows"])
def test_step_over(self):
#lldb.DBG.EnableLog("lldb", ["step","breakpoint"])
-
+
self.thread.StepOver()
# We should be stopped at the breakpoint_2 line with stop plan complete reason
self.assertEquals(self.process.GetState(), lldb.eStateStopped)
common_match = match_strings.GetStringAtIndex(0)
if num_matches == 0:
compare_string = str_input
- else:
+ else:
if common_match != None and len(common_match) > 0:
compare_string = str_input + common_match
else:
def test_ptr_and_ref(self):
"""Test that ref and ptr to std::bitset is displayed correctly"""
self.build()
- (_, process, _, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ (_, process, _, bkpt) = lldbutil.run_to_source_breakpoint(self,
'Check ref and ptr',
lldb.SBFileSpec("main.cpp", False))
self.check("ptr", 13)
lldbutil.continue_to_breakpoint(process, bkpt)
-
+
self.check("ref", 200)
self.check("ptr", 200)
self.runCmd("n") # This gets up past the printf
self.runCmd("n") # Now advance over the first push_back.
-
+
self.expect("frame variable numbers_list",
substrs=['list has 1 items',
'[0] = ',
"""Test that the data formatters work on ref and ptr."""
self.build()
(self.target, process, _, bkpt) = lldbutil.run_to_source_breakpoint(
- self, "Stop here to check by ref and ptr.",
+ self, "Stop here to check by ref and ptr.",
lldb.SBFileSpec("main.cpp", False))
# The reference should print just like the value:
self.check_ii("ref")
"""Test that the data formatters work on ref and ptr."""
self.build()
(self.target, process, _, bkpt) = lldbutil.run_to_source_breakpoint(
- self, "Stop here to check by ref and ptr.",
+ self, "Stop here to check by ref and ptr.",
lldb.SBFileSpec("main.cpp", False))
# The reference should print just like the value:
self.check_ii("ref")
substrs=["ptr =", "size=7"])
self.expect("expr ptr",
substrs=["size=7"])
-
+
self.check_numbers("ref")
# The pointer should just show the right number of elements:
-
+
self.expect("frame variable ptr", substrs=['ptr =', ' size=7'])
self.expect("p ptr", substrs=['$', 'size=7'])
self.assertEqual('"foobar"', frame.GetValueForVariablePath("ts[0]").GetSummary())
self.assertFalse(frame.GetValueForVariablePath("ts[1]").IsValid())
-
+
self.assertEqual(1, frame.GetValueForVariablePath("tt[0]").GetValueAsUnsigned())
self.assertEqual('"baz"', frame.GetValueForVariablePath("tt[1]").GetSummary())
self.assertEqual(2, frame.GetValueForVariablePath("tt[2]").GetValueAsUnsigned())
if not skip_exec:
self.assertTrue(process.GetState() == lldb.eStateStopped,
"Process should be stopped at __dyld_start")
-
+
threads = lldbutil.get_stopped_threads(
process, lldb.eStopReasonExec)
self.assertTrue(
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
self.check_language(thread, 0, c_frame_language)
self.check_language(thread, 1, lldb.eLanguageTypeC_plus_plus)
self.check_language(thread, 2, lldb.eLanguageTypeC_plus_plus)
-
-
+
+
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
frame = threads[0].GetFrameAtIndex(0)
command_result = lldb.SBCommandReturnObject()
interp = self.dbg.GetCommandInterpreter()
-
+
# Just get args:
result = interp.HandleCommand("frame var -l", command_result)
self.assertEqual(result, lldb.eReturnStatusSuccessFinishResult, "frame var -a didn't succeed")
self.assertTrue("argv" not in output, "Locals found argv")
self.assertTrue("test_var" in output, "Locals didn't find test_var")
self.assertTrue("g_var" not in output, "Locals found a global")
-
+
# Get the file statics:
result = interp.HandleCommand("frame var -l -a -g", command_result)
self.assertEqual(result, lldb.eReturnStatusSuccessFinishResult, "frame var -a didn't succeed")
self.assertTrue("argv" not in output, "Globals found argv")
self.assertTrue("test_var" not in output, "Globals found test_var")
self.assertTrue("g_var" in output, "Globals didn't find g_var")
-
-
+
+
return "T05thread:00000001;06:9038d60f00700000;07:98b4062680ffffff;10:c0d7bf1b80ffffff;"
def readRegister(self, register):
- regs = {0x0: "00b0060000610000",
- 0xa: "68fe471c80ffffff",
- 0xc: "60574a1c80ffffff",
- 0xd: "18f3042680ffffff",
- 0xe: "be8a4d7142000000",
- 0xf: "50df471c80ffffff",
+ regs = {0x0: "00b0060000610000",
+ 0xa: "68fe471c80ffffff",
+ 0xc: "60574a1c80ffffff",
+ 0xd: "18f3042680ffffff",
+ 0xe: "be8a4d7142000000",
+ 0xf: "50df471c80ffffff",
0x10: "c0d7bf1b80ffffff" }
if register in regs:
return regs[register]
i = 0
j = 0
log = self.server.responder.packetLog
-
+
while i < len(packets) and j < len(log):
if log[j] == packets[i]:
i += 1
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
result = lldb.SBCommandReturnObject()
interp.HandleCommand("command history", result, True)
interp.HandleCommand("platform list", result, True)
-
+
interp.HandleCommand("!0", result, False)
self.assertTrue(result.Succeeded(), "!0 command did not work: %s"%(result.GetError()))
self.assertTrue("command history" in result.GetOutput(), "!0 didn't rerun command history")
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
-
+
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
if not self.platformIsDarwin():
env_cmd_string += ":" + wd
self.runCmd(env_cmd_string)
-
+
# This time, the hidden library should be picked up.
self.expect("run", substrs=["return", "12345"])
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
-
+
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
# The directory with the dynamic library we did not link to.
path_dir = os.path.join(self.getBuildDir(), "hidden")
- (target, process, thread,
- _) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread,
+ _) = lldbutil.run_to_source_breakpoint(self,
"Break here to do the load using paths",
lldb.SBFileSpec("main.cpp"))
error = lldb.SBError()
paths.AppendString(os.path.join(self.wd, "no_such_dir"))
out_spec = lldb.SBFileSpec()
-
+
# First try with no correct directories on the path, and make sure that doesn't blow up:
token = process.LoadImageUsingPaths(lib_spec, paths, out_spec, error)
self.assertEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Only looked on the provided path.")
-
+
# Now add the correct dir to the paths list and try again:
paths.AppendString(self.hidden_dir)
token = process.LoadImageUsingPaths(lib_spec, paths, out_spec, error)
self.assertNotEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Got a valid token")
self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library")
-
+
# Make sure this really is in the image list:
loaded_module = target.FindModule(out_spec)
# Make sure the token works to unload it:
process.UnloadImage(token)
- # Make sure this really is no longer in the image list:
+ # Make sure this really is no longer in the image list:
loaded_module = target.FindModule(out_spec)
self.assertFalse(loaded_module.IsValid(), "The unloaded module is no longer in the image list.")
-
+
# Make sure a relative path also works:
paths.Clear()
paths.AppendString(os.path.join(self.wd, "no_such_dir"))
self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library with relative path")
process.UnloadImage(token)
-
+
# Make sure the presence of an empty path doesn't mess anything up:
paths.Clear()
paths.AppendString("")
self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library with included empty path")
process.UnloadImage(token)
-
+
# Finally, passing in an absolute path should work like the basename:
self.assertNotEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Got a valid token")
self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library")
-
+
self.assertTrue(found_it, "Couldn't find unlikely_to_occur_name in loaded libraries.")
-
+
self.expect(
"register read ymm" + str(i),
substrs=[pattern])
-
+
self.expect("continue", PROCESS_STOPPED, substrs=['stopped'])
# Check stop reason; Should be either signal SIGTRAP or EXC_BREAKPOINT
# Run again and we will stop in inner_sint the second time outer_sint is called.
# Then test stepping out two frames at once:
-
+
thread_list = lldbutil.continue_to_breakpoint(self.process, inner_sint_bkpt)
self.assertTrue(len(thread_list) == 1)
thread = thread_list[0]
target = self.dbg.GetSelectedTarget()
# This should create a breakpoint in the stepping thread.
- self.bkpt = target.BreakpointCreateByLocation("main.cpp", self.breakpoint)
+ self.bkpt = target.BreakpointCreateByLocation("main.cpp", self.breakpoint)
# Run the program.
self.runCmd("run", RUN_SUCCEEDED)
self.assertTrue(
num_threads >= 10,
'Number of expected threads and actual threads do not match.')
-
+
# Attempt to walk each of the thread's executing the thread3 function to
# the same breakpoint.
def is_thread3(thread):
cmd_line = "thread until"
for line_num in until_lines:
cmd_line += " %d"%(line_num)
-
+
cmd_interp.HandleCommand(cmd_line, ret_obj)
self.assertTrue(ret_obj.Succeeded(), "'%s' failed: %s."%(cmd_line, ret_obj.GetError()))
# Set a watchpoint at byteArray[3]
self.expect("watchpoint set variable byteArray[3]", WATCHPOINT_CREATED,
substrs=['Watchpoint created','size = 1'])
-
+
# Resume inferior.
self.runCmd("process continue")
else:
self.expect("thread list -v", STOPPED_DUE_TO_WATCHPOINT,
substrs=['stopped', 'stop reason = watchpoint 3'])
-
+
# Resume inferior.
self.runCmd("process continue")
wp.SetEnabled(False)
self.assertTrue(not wp.IsEnabled(), "The watchpoint thinks it is still enabled")
-
+
process.Continue()
-
+
stop_reason = thread.GetStopReason()
self.assertEqual(stop_reason, lldb.eStopReasonBreakpoint, "We didn't stop at our breakpoint.")
process.Continue()
stop_reason = thread.GetStopReason()
self.assertEqual(stop_reason, lldb.eStopReasonWatchpoint, "We didn't stop at our watchpoint")
-
+
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
def sample_test(self):
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
- "Break here to get started", self.main_source_file)
+ "Break here to get started", self.main_source_file)
# Set breakpoints in the two class methods and run to them:
namesp_bkpt = target.BreakpointCreateBySourceRegex("namesp function did something.", self.main_source_file)
virtual_type = virtual_this.GetType().GetUnqualifiedType()
self.assertEqual(virtual_type.GetName(), "Virtual *", "Didn't get the right dynamic type")
-
+
src_file = "main.cpp"
src_file_spec = lldb.SBFileSpec(src_file)
- (target, process, thread, main_breakpoint) = lldbutil.run_to_source_breakpoint(self,
+ (target, process, thread, main_breakpoint) = lldbutil.run_to_source_breakpoint(self,
"break here", src_file_spec, exe_name = exe)
# Get frame for current thread
return thread.GetSelectedFrame()
lldbinline.MakeInlineTest(
__file__, globals(), [
decorators.expectedFailureAll(
- oslist=["windows"], bugnumber="llvm.org/pr24764")])
\ No newline at end of file
+ oslist=["windows"], bugnumber="llvm.org/pr24764")])
@expectedFailureAll(oslist=["windows"])
def test_c(self):
self.do_test(True)
-
+
def do_test(self, test_c):
self.build()
options = lldb.SBExpressionOptions()
inVal_expr = frame.EvaluateExpression("inVal", options)
self.check_value(inVal_expr, 10)
-
+
thread.StepOut()
outVal_ret = thread.GetStopReturnValue()
self.check_value(outVal_ret, 30)
def expr_test(self, trivial):
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
- "Set a breakpoint here", self.main_source_file)
+ "Set a breakpoint here", self.main_source_file)
# Stop in a function that takes a trivial value, and try both frame var & expr to get its value:
if trivial:
break
if val == DW_OP_regx:
- # Read register number
+ # Read register number
self.assertTrue(len(dwarf_opcode) > (index + 1))
reg_no = int(dwarf_opcode.pop(index + 1), 16)
["read packet: $p{0:x}#00".format(reg_no),
{"direction": "send", "regex": r"^\$([0-9a-fA-F]+)#",
"capture": {1: "p_response"}}],True)
-
+
Context = self.expect_gdbremote_sequence()
self.assertIsNotNone(Context)
p_response = Context.get("p_response")
elif val == DW_OP_lit1:
# Push literal 1
dwarf_data.append(1)
-
+
elif val == DW_OP_lit26:
# Push literal 26
dwarf_data.append(26)
"""Return the full path to the current test."""
return os.path.join(os.environ["LLDB_BUILD"], self.mydir,
self.getBuildDirBasename())
-
-
+
+
def makeBuildDir(self):
"""Create the test-specific working directory, deleting any previous
contents."""
if os.path.isdir(bdir):
shutil.rmtree(bdir)
lldbutil.mkdir_p(bdir)
-
+
def getBuildArtifact(self, name="a.out"):
"""Return absolute path to an artifact in the test's build directory."""
return os.path.join(self.getBuildDir(), name)
-
+
def getSourcePath(self, name):
"""Return absolute path to a file in the test's source directory."""
return os.path.join(self.getSourceDir(), name)
temp = os.path.join(self.getSourceDir(), template)
with open(temp, 'r') as f:
content = f.read()
-
+
public_api_dir = os.path.join(
os.environ["LLDB_SRC"], "include", "lldb", "API")
def run_to_breakpoint_make_target(test, exe_name, in_cwd):
if in_cwd:
exe = test.getBuildArtifact(exe_name)
-
+
# Create the target
target = test.dbg.CreateTarget(exe)
test.assertTrue(target, "Target: %s is not valid."%(exe_name))
error = lldb.SBError()
process = target.Launch(launch_info, error)
- test.assertTrue(process,
- "Could not create a valid process for %s: %s"%(target.GetExecutable().GetFilename(),
+ test.assertTrue(process,
+ "Could not create a valid process for %s: %s"%(target.GetExecutable().GetFilename(),
error.GetCString()))
# Frame #0 should be at our breakpoint.
thread = threads[0]
return (target, process, thread, bkpt)
-def run_to_name_breakpoint (test, bkpt_name, launch_info = None,
+def run_to_name_breakpoint (test, bkpt_name, launch_info = None,
exe_name = "a.out",
bkpt_module = None,
in_cwd = True):
# Set the breakpoints
breakpoint = target.BreakpointCreateBySourceRegex(
bkpt_pattern, source_spec, bkpt_module)
- test.assertTrue(breakpoint.GetNumLocations() > 0,
+ test.assertTrue(breakpoint.GetNumLocations() > 0,
'No locations found for source breakpoint: "%s", file: "%s", dir: "%s"'%(bkpt_pattern, source_spec.GetFilename(), source_spec.GetDirectory()))
return run_to_breakpoint_do_run(test, target, breakpoint, launch_info)
error = lldb.SBError()
process = target.Launch(launch_info, error)
-
+
self.assertTrue(process.IsValid(), "Could not create a valid process for TestApp: %s"%(error.GetCString()))
-
+
# Frame #0 should be at our breakpoint.
threads = lldbutil.get_threads_stopped_at_breakpoint(process, bkpt)
-
+
self.assertTrue(len(threads) == 1, "Expected 1 thread to stop at breakpoint, %d did."%(len(threads)))
sleep(5)
# Since the library that was dlopen()'ed is now removed, lldb will need to find the
- # binary & dSYM via target.exec-search-paths
+ # binary & dSYM via target.exec-search-paths
settings_str = "settings set target.exec-search-paths " + self.get_process_working_directory() + "/hide.app"
self.runCmd(settings_str)
sleep(5)
# Since the library that was dlopen()'ed is now removed, lldb will need to find the
- # binary & dSYM via target.exec-search-paths
+ # binary & dSYM via target.exec-search-paths
settings_str = "settings set target.exec-search-paths " + self.get_process_working_directory() + "/hide.app"
self.runCmd(settings_str)
self.runCmd("process attach -p " + str(popen.pid))
dsym_name = mod.GetSymbolFileSpec().GetFilename()
self.assertTrue (dsym_name == 'MyFramework', "Check that we found the dSYM for the bundle that was loaded")
i=i+1
-
+
self.assertTrue(found_module, "Check that we found the framework loaded in lldb's image list")
if __name__ == '__main__':
-"""Test that we get thread names when interrupting a process."""
+"""Test that we get thread names when interrupting a process."""
from __future__ import print_function
process.Kill()
- # The process will set a global variable 'threads_up_and_running' to 1 when
+ # The process will set a global variable 'threads_up_and_running' to 1 when
# it has has completed its setup. Sleep for one second, pause the program,
# check to see if the global has that value, and continue if it does not.
def wait_until_program_setup_complete(self, process, listener):
return False
# Listen to the process events until we get an event saying the process is
- # stopped. Retry up to five times in case we get other events that we are
+ # stopped. Retry up to five times in case we get other events that we are
# not looking for.
def wait_for_stop(self, process, listener):
retry_count = 5
@expectedFailureAll(oslist=["windows"], bugnumber='llvm.org/pr21765')
def test_target(self):
"""Exercise SBTarget.FindFunctions() with various name masks.
-
+
A previous regression caused mangled names to not be able to be looked up.
This test verifies that using a mangled name with eFunctionNameTypeFull works
and that using a function basename with eFunctionNameTypeFull works for all
self.assertTrue(target, VALID_TARGET)
exe_module = target.FindModule(target.GetExecutable())
-
+
c_name_to_symbol = {}
cpp_name_to_symbol = {}
mangled_to_symbol = {}
c_name_to_symbol[name] = symbol
# Make sure each mangled name turns up exactly one match when looking up
- # functions by full name and using the mangled name as the name in the
+ # functions by full name and using the mangled name as the name in the
# lookup
self.assertGreaterEqual(len(mangled_to_symbol), 6)
for mangled in mangled_to_symbol.keys():
for symbol_context in symbol_contexts:
self.assertTrue(symbol_context.GetFunction().IsValid())
self.assertTrue(symbol_context.GetSymbol().IsValid())
-
-
+
+
@add_test_categories(['pyapi'])
def test_byte_order_and_address_byte_size(self):
- """Test the SBData::SetData() to ensure the byte order and address
+ """Test the SBData::SetData() to ensure the byte order and address
byte size are obeyed"""
addr_data = b'\x11\x22\x33\x44\x55\x66\x77\x88'
error = lldb.SBError()
mydir = TestBase.compute_mydir(__file__)
- # If your test case doesn't stress debug info, the
+ # If your test case doesn't stress debug info, the
# set this to true. That way it won't be run once for
# each debug info format.
NO_DEBUG_INFO_TESTCASE = True
# It optionally takes an SBLaunchOption argument if you want to pass
# arguments or environment variables.
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
- "Set a breakpoint here", self.main_source_file)
+ "Set a breakpoint here", self.main_source_file)
frame = thread.GetFrameAtIndex(0)
test_var = frame.FindVariable("test_var")
# settings under an ".experimental" domain should have two properties:
# 1. If the name does not exist with "experimental" in the name path,
# the name lookup should try to find it without "experimental". So
- # a previously-experimental setting that has been promoted to a
+ # a previously-experimental setting that has been promoted to a
# "real" setting will still be set by the original name.
# 2. Changing a setting with .experimental., name, where the setting
# does not exist either with ".experimental." or without, should
with open(destFile, 'w+') as dest:
dest.write(src.read().replace("a.out", self.myexe))
return destFile
-
+
@skipIfRemote # We do not currently support remote debugging via the MI.
@skipIfWindows # llvm.org/pr24452: Get lldb-mi tests working on Windows
@skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races
THREAD_COUNT = 5
@skipIfDarwinEmbedded # <rdar://problem/34539270> lldb-server tests not updated to work on ios etc yet
- @skipIfDarwinEmbedded # <rdar://problem/27005337>
+ @skipIfDarwinEmbedded # <rdar://problem/27005337>
def gather_stop_replies_via_qThreadStopInfo(self, thread_count):
# Set up the inferior args.
inferior_args = []
BREAKPOINT_KIND = 1
# Set default packet type to Z0 (software breakpoint)
- z_packet_type = 0
+ z_packet_type = 0
# If hardware breakpoint is requested set packet type to Z1
if want_hardware == True: