def test(self): self.build() self.line_foo = line_number('foo.cpp', '// !BR_foo') self.line_main = line_number('main.cpp', '// !BR_main') target = self.dbg.CreateTarget(self.getBuildArtifact("a.out")) self.assertTrue(target, VALID_TARGET) env = self.registerSharedLibrariesWithTarget(target, ["foo"]) bp_main = lldbutil.run_break_set_by_file_and_line( self, 'main.cpp', self.line_main) bp_foo = lldbutil.run_break_set_by_file_and_line( self, 'foo.cpp', self.line_foo, num_expected_locations=-2) process = target.LaunchSimple(None, env, self.get_process_working_directory()) self.assertIsNotNone( lldbutil.get_one_thread_stopped_at_breakpoint_id( self.process(), bp_foo)) self.runCmd("continue") self.assertIsNotNone( lldbutil.get_one_thread_stopped_at_breakpoint_id( self.process(), bp_main))
def test(self): self.build() target = lldbutil.run_to_breakpoint_make_target(self) #This should create a breakpoint with 1 location. bp1_id = \ lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.break_1, num_expected_locations=1) bp2_id = \ lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.break_2, num_expected_locations=1) bp3_id = \ lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.break_3, num_expected_locations=1) #Run the program. self.runCmd("run", RUN_SUCCEEDED) #Get the target process process = target.GetProcess() if self.TraceOn(): print('First stop:') self.printThreadsStoppedByBreakpoint(process) thread_to_suspend = \ lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp1_id) self.assertIsNotNone(thread_to_suspend, "Should hit breakpoint 1") thread_to_suspend.Suspend() #Do not stop at bp2 and autocontinue to bp3 target.FindBreakpointByID(bp2_id).SetAutoContinue(True) #Run to the third breakpoint self.runCmd("continue") if self.TraceOn(): print('Second stop:') self.printThreadsStoppedByBreakpoint(process) stopped_thread = \ lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp3_id) self.assertIsNotNone(stopped_thread, "Should hit breakpoint 3") thread_to_suspend.Resume() #Run to completion self.runCmd("continue") #At this point, the inferior process should have exited. self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
def test_true(self): self.build() exe = os.path.join(os.getcwd(), "a.out") self.runCmd("target create %s" % exe) bpid = lldbutil.run_break_set_by_symbol(self, "bkpt_true", extra_options="--skip-prologue 0") self.runCmd("run") self.assertIsNotNone(lldbutil.get_one_thread_stopped_at_breakpoint_id( self.process(), bpid))
def test_true(self): self.build() exe = self.getBuildArtifact("a.out") self.runCmd("target create %s" % exe) bpid = lldbutil.run_break_set_by_symbol(self, "bkpt_true", extra_options="--skip-prologue 0") self.runCmd("run") self.assertIsNotNone(lldbutil.get_one_thread_stopped_at_breakpoint_id( self.process(), bpid))
def test(self): self.build() exe = os.path.join(os.getcwd(), "a.out") self.runCmd("file %s" % exe) bp_main = lldbutil.run_break_set_by_file_and_line( self, 'main.cpp', self.line_main) bp_foo = lldbutil.run_break_set_by_file_and_line( self, 'foo.cpp', self.line_foo) self.runCmd("run") self.assertIsNotNone( lldbutil.get_one_thread_stopped_at_breakpoint_id( self.process(), bp_foo)) self.runCmd("continue") self.assertIsNotNone( lldbutil.get_one_thread_stopped_at_breakpoint_id( self.process(), bp_main))
def test_breakpoint(self): self.build() exe = self.getBuildArtifact("a.out") line = line_number('main.c', '// Set break point at this line.') self.runCmd("target create %s" % exe) bpid = lldbutil.run_break_set_by_file_and_line(self, "main.c", line) self.runCmd("run") self.assertIsNotNone(lldbutil.get_one_thread_stopped_at_breakpoint_id( self.process(), bpid), "Process is not stopped at breakpoint") self.process().Continue() self.assertEqual(self.process().GetState(), lldb.eStateExited, PROCESS_EXITED)
def exit_during_step_base(self, step_cmd, step_stop_reason, by_instruction): """Test thread exit during step handling.""" exe = self.getBuildArtifact("a.out") self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) # This should create a breakpoint in the main thread. self.bp_num = lldbutil.run_break_set_by_file_and_line( self, "main.cpp", self.breakpoint, num_expected_locations=1) # The breakpoint list should show 1 location. self.expect( "breakpoint list -f", "Breakpoint location shown correctly", substrs=[ "1: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.breakpoint ]) # Run the program. self.runCmd("run", RUN_SUCCEEDED) # The stop reason of the thread should be breakpoint. self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, substrs=['stopped', 'stop reason = breakpoint']) # Get the target process target = self.dbg.GetSelectedTarget() process = target.GetProcess() num_threads = process.GetNumThreads() # Make sure we see all three threads self.assertGreaterEqual( num_threads, 3, 'Number of expected threads and actual threads do not match.') stepping_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id( process, self.bp_num) self.assertIsNotNone( stepping_thread, "Could not find a thread stopped at the breakpoint") current_line = self.breakpoint stepping_frame = stepping_thread.GetFrameAtIndex(0) self.assertEqual( current_line, stepping_frame.GetLineEntry().GetLine(), "Starting line for stepping doesn't match breakpoint line.") # Keep stepping until we've reached our designated continue point while current_line != self.continuepoint: # Since we're using the command interpreter to issue the thread command # (on the selected thread) we need to ensure the selected thread is the # stepping thread. if stepping_thread != process.GetSelectedThread(): process.SetSelectedThread(stepping_thread) self.runCmd(step_cmd) frame = stepping_thread.GetFrameAtIndex(0) current_line = frame.GetLineEntry().GetLine() if by_instruction and current_line == 0: continue self.assertGreaterEqual( current_line, self.breakpoint, "Stepped to unexpected line, " + str(current_line)) self.assertLessEqual( current_line, self.continuepoint, "Stepped to unexpected line, " + str(current_line)) self.runCmd("thread list") # Update the number of threads new_num_threads = process.GetNumThreads() # Check to see that we reduced the number of threads as expected self.assertEqual( new_num_threads, num_threads - 1, 'Number of threads did not reduce by 1 after thread exit.') self.expect("thread list", 'Process state is stopped due to step', substrs=['stopped', step_stop_reason]) # Run to completion self.runCmd("continue") # At this point, the inferior process should have exited. self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
def test(self): """Test thread exit handling.""" self.build(dictionary=self.getBuildFlags()) exe = self.getBuildArtifact("a.out") self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) # This should create a breakpoint with 1 location. bp1_id = lldbutil.run_break_set_by_file_and_line( self, "main.cpp", self.break_1, num_expected_locations=1) bp2_id = lldbutil.run_break_set_by_file_and_line( self, "main.cpp", self.break_2, num_expected_locations=1) bp3_id = lldbutil.run_break_set_by_file_and_line( self, "main.cpp", self.break_3, num_expected_locations=1) bp4_id = lldbutil.run_break_set_by_file_and_line( self, "main.cpp", self.break_4, num_expected_locations=1) # The breakpoint list should show 1 locations. self.expect( "breakpoint list -f", "Breakpoint location shown correctly", substrs=[ "1: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.break_1, "2: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.break_2, "3: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.break_3, "4: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.break_4 ]) # Run the program. self.runCmd("run", RUN_SUCCEEDED) # Get the target process target = self.dbg.GetSelectedTarget() process = target.GetProcess() stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id( process, bp1_id) self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 1") # Get the number of threads num_threads = process.GetNumThreads() self.assertGreaterEqual( num_threads, 2, 'Number of expected threads and actual threads do not match at breakpoint 1.' ) # Run to the second breakpoint self.runCmd("continue") stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id( process, bp2_id) self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 2") # Update the number of threads new_num_threads = process.GetNumThreads() self.assertEqual( new_num_threads, num_threads + 1, 'Number of expected threads did not increase by 1 at bp 2.') # Run to the third breakpoint self.runCmd("continue") stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id( process, bp3_id) self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 3") # Update the number of threads new_num_threads = process.GetNumThreads() self.assertEqual( new_num_threads, num_threads, 'Number of expected threads is not equal to original number of threads at bp 3.' ) # Run to the fourth breakpoint self.runCmd("continue") stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id( process, bp4_id) self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 4") # Update the number of threads new_num_threads = process.GetNumThreads() self.assertEqual( new_num_threads, num_threads - 1, 'Number of expected threads did not decrease by 1 at bp 4.') # Run to completion self.runCmd("continue") # At this point, the inferior process should have exited. self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
def exit_during_step_base(self, step_cmd, step_stop_reason): """Test thread exit during step handling.""" exe = os.path.join(os.getcwd(), "a.out") self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) # This should create a breakpoint in the main thread. self.bp_num = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.breakpoint, num_expected_locations=1) # The breakpoint list should show 1 location. self.expect("breakpoint list -f", "Breakpoint location shown correctly", substrs = ["1: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.breakpoint]) # Run the program. self.runCmd("run", RUN_SUCCEEDED) # The stop reason of the thread should be breakpoint. self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, substrs = ['stopped', 'stop reason = breakpoint']) # Get the target process target = self.dbg.GetSelectedTarget() process = target.GetProcess() num_threads = process.GetNumThreads() # Make sure we see all three threads self.assertGreaterEqual(num_threads, 3, 'Number of expected threads and actual threads do not match.') stepping_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, self.bp_num) self.assertIsNotNone(stepping_thread, "Could not find a thread stopped at the breakpoint") current_line = self.breakpoint stepping_frame = stepping_thread.GetFrameAtIndex(0) self.assertEqual(current_line, stepping_frame.GetLineEntry().GetLine(), "Starting line for stepping doesn't match breakpoint line.") # Keep stepping until we've reached our designated continue point while current_line != self.continuepoint: # Since we're using the command interpreter to issue the thread command # (on the selected thread) we need to ensure the selected thread is the # stepping thread. if stepping_thread != process.GetSelectedThread(): process.SetSelectedThread(stepping_thread) self.runCmd(step_cmd) frame = stepping_thread.GetFrameAtIndex(0) current_line = frame.GetLineEntry().GetLine() self.assertGreaterEqual(current_line, self.breakpoint, "Stepped to unexpected line, " + str(current_line)) self.assertLessEqual(current_line, self.continuepoint, "Stepped to unexpected line, " + str(current_line)) self.runCmd("thread list") # Update the number of threads new_num_threads = process.GetNumThreads() # Check to see that we reduced the number of threads as expected self.assertEqual(new_num_threads, num_threads-1, 'Number of threads did not reduce by 1 after thread exit.') self.expect("thread list", 'Process state is stopped due to step', substrs = ['stopped', step_stop_reason]) # Run to completion self.runCmd("continue") # At this point, the inferior process should have exited. self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
def test(self): """Test thread exit handling.""" self.build(dictionary=self.getBuildFlags()) exe = os.path.join(os.getcwd(), "a.out") self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) # This should create a breakpoint with 1 location. bp1_id = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_1, num_expected_locations=1) bp2_id = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_2, num_expected_locations=1) bp3_id = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_3, num_expected_locations=1) bp4_id = lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.break_4, num_expected_locations=1) # The breakpoint list should show 1 locations. self.expect("breakpoint list -f", "Breakpoint location shown correctly", substrs = ["1: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.break_1, "2: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.break_2, "3: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.break_3, "4: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % self.break_4]) # Run the program. self.runCmd("run", RUN_SUCCEEDED) # Get the target process target = self.dbg.GetSelectedTarget() process = target.GetProcess() stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp1_id) self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 1") # Get the number of threads num_threads = process.GetNumThreads() self.assertGreaterEqual(num_threads, 2, 'Number of expected threads and actual threads do not match at breakpoint 1.') # Run to the second breakpoint self.runCmd("continue") stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp2_id) self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 2") # Update the number of threads new_num_threads = process.GetNumThreads() self.assertEqual(new_num_threads, num_threads+1, 'Number of expected threads did not increase by 1 at bp 2.') # Run to the third breakpoint self.runCmd("continue") stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp3_id) self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 3") # Update the number of threads new_num_threads = process.GetNumThreads() self.assertEqual(new_num_threads, num_threads, 'Number of expected threads is not equal to original number of threads at bp 3.') # Run to the fourth breakpoint self.runCmd("continue") stopped_thread = lldbutil.get_one_thread_stopped_at_breakpoint_id(process, bp4_id) self.assertIsNotNone(stopped_thread, "Process is not stopped at breakpoint 4") # Update the number of threads new_num_threads = process.GetNumThreads() self.assertEqual(new_num_threads, num_threads-1, 'Number of expected threads did not decrease by 1 at bp 4.') # Run to completion self.runCmd("continue") # At this point, the inferior process should have exited. self.assertEqual(process.GetState(), lldb.eStateExited, PROCESS_EXITED)