From 8841b0329034ec81c3db0344b903a305b9710a09 Mon Sep 17 00:00:00 2001 From: Tamas Berghammer Date: Mon, 11 May 2015 14:42:09 +0000 Subject: [PATCH] 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 --- .../breakpoint/consecutive_breakpoins/Makefile | 9 +++ .../TestConsecutiveBreakpoints.py | 78 ++++++++++++++++++++++ .../breakpoint/consecutive_breakpoins/main.cpp | 19 ++++++ 3 files changed, 106 insertions(+) create mode 100644 lldb/test/functionalities/breakpoint/consecutive_breakpoins/Makefile create mode 100644 lldb/test/functionalities/breakpoint/consecutive_breakpoins/TestConsecutiveBreakpoints.py create mode 100644 lldb/test/functionalities/breakpoint/consecutive_breakpoins/main.cpp diff --git a/lldb/test/functionalities/breakpoint/consecutive_breakpoins/Makefile b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/Makefile new file mode 100644 index 0000000..f89b52a9 --- /dev/null +++ b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/Makefile @@ -0,0 +1,9 @@ +LEVEL = ../../../make + +CXX_SOURCES := main.cpp + +ifneq (,$(findstring icc,$(CC))) + CXXFLAGS += -debug inline-debug-info +endif + +include $(LEVEL)/Makefile.rules diff --git a/lldb/test/functionalities/breakpoint/consecutive_breakpoins/TestConsecutiveBreakpoints.py b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/TestConsecutiveBreakpoints.py new file mode 100644 index 0000000..fe1459f --- /dev/null +++ b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/TestConsecutiveBreakpoints.py @@ -0,0 +1,78 @@ +""" +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() + diff --git a/lldb/test/functionalities/breakpoint/consecutive_breakpoins/main.cpp b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/main.cpp new file mode 100644 index 0000000..c1943f0 --- /dev/null +++ b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/main.cpp @@ -0,0 +1,19 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int +main(int argc, char const *argv[]) +{ + int a = 0; + int b = 1; + a = b + 1; // Set breakpoint here + b = a + 1; + return 0; +} + -- 2.7.4