brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 1c7ef9f Raw
89 lines · python
1"""2Test that suspended threads do not affect should-stop decisions.3"""4 5import lldb6from lldbsuite.test.decorators import *7from lldbsuite.test.lldbtest import *8import lldbsuite.test.lldbutil as lldbutil9 10 11class IgnoreSuspendedThreadTestCase(TestBase):12    NO_DEBUG_INFO_TESTCASE = True13 14    def setUp(self):15        # Call super's setUp().16        TestBase.setUp(self)17        # Find the line numbers for our breakpoints.18        self.break_1 = line_number("main.cpp", "// Set first breakpoint here")19        self.break_2 = line_number("main.cpp", "// Set second breakpoint here")20        self.break_3 = line_number("main.cpp", "// Set third breakpoint here")21 22    def printThreadsStoppedByBreakpoint(self, process):23        stopped_threads = lldbutil.get_stopped_threads(24            process, lldb.eStopReasonBreakpoint25        )26        for thread in stopped_threads:27            break_id = thread.GetStopReasonDataAtIndex(0)28            print(29                "Thread "30                + str(thread.GetThreadID())31                + " stopped at breakpoint "32                + str(break_id)33            )34 35    def test(self):36        self.build()37        target = lldbutil.run_to_breakpoint_make_target(self)38 39        # This should create a breakpoint with 1 location.40        bp1_id = lldbutil.run_break_set_by_file_and_line(41            self, "main.cpp", self.break_1, num_expected_locations=142        )43 44        bp2_id = lldbutil.run_break_set_by_file_and_line(45            self, "main.cpp", self.break_2, num_expected_locations=146        )47 48        bp3_id = lldbutil.run_break_set_by_file_and_line(49            self, "main.cpp", self.break_3, num_expected_locations=150        )51 52        # Run the program.53        self.runCmd("run", RUN_SUCCEEDED)54        # Get the target process55        process = target.GetProcess()56 57        if self.TraceOn():58            print("First stop:")59            self.printThreadsStoppedByBreakpoint(process)60 61        thread_to_suspend = lldbutil.get_one_thread_stopped_at_breakpoint_id(62            process, bp1_id63        )64        self.assertIsNotNone(thread_to_suspend, "Should hit breakpoint 1")65        thread_to_suspend.Suspend()66 67        # Do not stop at bp2 and autocontinue to bp368        target.FindBreakpointByID(bp2_id).SetAutoContinue(True)69 70        # Run to the third breakpoint71        self.runCmd("continue")72 73        if self.TraceOn():74            print("Second stop:")75            self.printThreadsStoppedByBreakpoint(process)76 77        stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(78            process, bp3_id79        )80        self.assertIsNotNone(stopped_thread, "Should hit breakpoint 3")81 82        thread_to_suspend.Resume()83 84        # Run to completion85        self.runCmd("continue")86 87        # At this point, the inferior process should have exited.88        self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)89