"""Test that the expedited thread pc values are not re-fetched by lldb.""" import subprocess import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil file_index = 0 class TestExpeditedThreadPCs(TestBase): NO_DEBUG_INFO_TESTCASE = True @skipUnlessDarwin def test_expedited_thread_pcs(self): TestBase.setUp(self) global file_index ++file_index logfile = os.path.join( self.getBuildDir(), "packet-log-" + self.getArchitecture() + "-" + str(file_index) + ".txt", ) self.runCmd("log enable -f %s gdb-remote packets" % (logfile)) def cleanup(): self.runCmd("log disable gdb-remote packets") if os.path.exists(logfile): os.unlink(logfile) self.addTearDownHook(cleanup) self.source = "main.cpp" self.build() (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( self, "break here", lldb.SBFileSpec(self.source, False) ) # verify that libfoo.dylib hasn't loaded yet for m in target.modules: self.assertNotEqual(m.GetFileSpec().GetFilename(), "libfoo.dylib") thread.StepInto() thread.StepInto() thread.StepInto() thread.StepInto() thread.StepInto() # verify that libfoo.dylib has loaded for m in target.modules: if m.GetFileSpec().GetFilename() == "libfoo.dylib": found_libfoo = True self.assertTrue(found_libfoo) thread.StepInto() thread.StepInto() thread.StepOver() thread.StepOver() thread.StepOver() thread.StepOver() thread.StepOver() thread.StepOver() thread.StepOver() thread.StepOver() thread.StepOver() thread.StepOver() process.Kill() # Confirm that we never fetched the pc for any threads during # this debug session. if os.path.exists(logfile): f = open(logfile) lines = f.readlines() num_errors = 0 for line in lines: arch = self.getArchitecture() if arch == "arm64" or arch == "arm64_32": # # A fetch of $pc on arm64 looks like # < 22> send packet: $p20;thread:91698e;#70 self.assertNotIn("$p20;thread", line) else: # # A fetch of $pc on x86_64 looks like # < 22> send packet: $p10;thread:91889c;#6f self.assertNotIn("$p10;thread", line) f.close()