1""" 2Test regression for Bug 25251. 3""" 4 5import unittest2 6import lldb 7from lldbsuite.test.decorators import * 8from lldbsuite.test.lldbtest import * 9from lldbsuite.test import lldbutil 10 11 12class BacktraceAllTestCase(TestBase): 13 14 mydir = TestBase.compute_mydir(__file__) 15 16 def setUp(self): 17 # Call super's setUp(). 18 TestBase.setUp(self) 19 # Find the line number for our breakpoint. 20 self.breakpoint = line_number( 21 'ParallelTask.cpp', '// Set breakpoint here') 22 23 # The android-arm compiler can't compile the inferior 24 @skipIfTargetAndroid(archs=["arm"]) 25 # because of an issue around std::future. 26 # TODO: Change the test to don't depend on std::future<T> 27 def test(self): 28 """Test breakpoint handling after a thread join.""" 29 self.build(dictionary=self.getBuildFlags()) 30 31 exe = self.getBuildArtifact("a.out") 32 self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 33 34 # This should create a breakpoint 35 lldbutil.run_break_set_by_file_and_line( 36 self, "ParallelTask.cpp", self.breakpoint, num_expected_locations=-1) 37 38 # The breakpoint list should show 1 location. 39 self.expect( 40 "breakpoint list -f", 41 "Breakpoint location shown correctly", 42 substrs=[ 43 "1: file = 'ParallelTask.cpp', line = %d, exact_match = 0" % 44 self.breakpoint]) 45 46 # Run the program. 47 self.runCmd("run", RUN_SUCCEEDED) 48 49 # The stop reason of the thread should be breakpoint. 50 self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 51 substrs=['stopped', 52 'stop reason = breakpoint']) 53 54 # This should not result in a segmentation fault 55 self.expect("thread backtrace all", STOPPED_DUE_TO_BREAKPOINT, 56 substrs=["stop reason = breakpoint 1."]) 57 58 # Run to completion 59 self.runCmd("continue") 60