Files
clang-p2996/lldb/test/functionalities/breakpoint/consecutive_breakpoins/TestConsecutiveBreakpoints.py
Tamas Berghammer 8841b03290 New test for llvm.org/pr23478
When there is two brekapoint on two consecutive instruction then
the second breakpoint is ignored by lldb. This test check for the
correct behaviour in this scenario.

Differential revision: http://reviews.llvm.org/D9661

llvm-svn: 236997
2015-05-11 14:42:09 +00:00

79 lines
2.6 KiB
Python

"""
Test continue from a breakpoint when there is a breakpoint on the next instruction also.
"""
import unittest2
import lldb, lldbutil
from lldbtest import *
class ConsecutiveBreakpoitsTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@skipUnlessDarwin
@dsym_test
@unittest2.expectedFailure("llvm.org/pr23478")
def test_with_dsym (self):
self.buildDsym ()
self.consecutive_breakpoints_tests()
@dwarf_test
@unittest2.expectedFailure("llvm.org/pr23478")
def test_with_dwarf (self):
self.buildDwarf ()
self.consecutive_breakpoints_tests()
def consecutive_breakpoints_tests(self):
exe = os.path.join (os.getcwd(), "a.out")
# Create a target by the debugger.
target = self.dbg.CreateTarget(exe)
self.assertTrue(target, VALID_TARGET)
breakpoint = target.BreakpointCreateBySourceRegex("Set breakpoint here", lldb.SBFileSpec("main.cpp"))
self.assertTrue(breakpoint and
breakpoint.GetNumLocations() == 1,
VALID_BREAKPOINT)
# Now launch the process, and do not stop at entry point.
process = target.LaunchSimple (None, None, self.get_process_working_directory())
self.assertTrue(process, PROCESS_IS_VALID)
# We should be stopped at the first breakpoint
thread = process.GetThreadAtIndex(0)
self.assertEqual(thread.GetStopReason(), lldb.eStopReasonBreakpoint)
# Step to the next instruction
thread.StepInstruction(False)
self.assertEqual(thread.GetStopReason(), lldb.eStopReasonPlanComplete)
address = thread.GetFrameAtIndex(0).GetPC()
# Run the process until termination
process.Continue()
# Now launch the process again, and do not stop at entry point.
process = target.LaunchSimple (None, None, self.get_process_working_directory())
self.assertTrue(process, PROCESS_IS_VALID)
# We should be stopped at the first breakpoint
thread = process.GetThreadAtIndex(0)
self.assertEqual(thread.GetStopReason(), lldb.eStopReasonBreakpoint)
# Set breakpoint to the next instruction
target.BreakpointCreateByAddress(address)
process.Continue()
# We should be stopped at the second breakpoint
thread = process.GetThreadAtIndex(0)
self.assertEqual(thread.GetStopReason(), lldb.eStopReasonBreakpoint)
# Run the process until termination
process.Continue()
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
atexit.register(lambda: lldb.SBDebugger.Terminate())
unittest2.main()