72 lines · python
1import lldb2from lldbsuite.test.decorators import *3from lldbsuite.test.lldbtest import *4from lldbsuite.test import lldbutil5 6 7class TestBreakInLoadedDylib(TestBase):8 """Test that we can set a source regex breakpoint that will take in9 a dlopened library that hasn't loaded when we set the breakpoint."""10 11 NO_DEBUG_INFO_TESTCASE = True12 13 @skipIfRemote14 def common_setup(self):15 self.build()16 ctx = self.platformContext17 self.main_spec = lldb.SBFileSpec("main.cpp")18 self.b_spec = lldb.SBFileSpec("b.cpp")19 self.lib_shortname = "lib_b"20 self.lib_fullname = (21 ctx.shlib_prefix + self.lib_shortname + "." + ctx.shlib_extension22 )23 self.lib_spec = lldb.SBFileSpec(self.lib_fullname)24 25 def test_break_in_dlopen_dylib_using_lldbutils(self):26 self.common_setup()27 lldbutil.run_to_source_breakpoint(28 self,29 "Break here in dylib",30 self.b_spec,31 bkpt_module=self.lib_fullname,32 extra_images=[self.lib_shortname],33 has_locations_before_run=False,34 )35 36 @skipIfRemote37 def test_break_in_dlopen_dylib_using_target(self):38 self.common_setup()39 40 target, process, _, _ = lldbutil.run_to_source_breakpoint(41 self,42 "Break here before we dlopen",43 self.main_spec,44 extra_images=[self.lib_shortname],45 )46 47 # Now set some breakpoints that won't take till the library is loaded:48 # This one is currently how lldbutils does it but test here in case that changes:49 bkpt1 = target.BreakpointCreateBySourceRegex(50 "Break here in dylib", self.b_spec, self.lib_fullname51 )52 53 # Try the file list API as well. Put in some bogus entries too, to make sure those54 # don't trip us up:55 56 files_list = lldb.SBFileSpecList()57 files_list.Append(self.b_spec)58 files_list.Append(self.main_spec)59 files_list.Append(lldb.SBFileSpec("I_bet_nobody_has_this_file.cpp"))60 61 modules_list = lldb.SBFileSpecList()62 modules_list.Append(self.lib_spec)63 modules_list.Append(lldb.SBFileSpec("libI_bet_not_this_one_either.dylib"))64 65 bkpt2 = target.BreakpointCreateBySourceRegex(66 "Break here in dylib", modules_list, files_list67 )68 69 lldbutil.continue_to_breakpoint(process, bkpt1)70 self.assertEqual(bkpt1.GetHitCount(), 1, "Hit breakpoint 1")71 self.assertEqual(bkpt2.GetHitCount(), 1, "Hit breakpoint 2")72