Home | History | Annotate | Download | only in inlined_breakpoints
      1 """
      2 Test that inlined breakpoints (breakpoint set on a file/line included from
      3 another source file) works correctly.
      4 """
      5 
      6 import os, time
      7 import unittest2
      8 import lldb
      9 from lldbtest import *
     10 import lldbutil
     11 
     12 class InlinedBreakpointsTestCase(TestBase):
     13     """Bug fixed: rdar://problem/8464339"""
     14 
     15     mydir = os.path.join("functionalities", "breakpoint", "inlined_breakpoints")
     16 
     17     @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
     18     @dsym_test
     19     def test_with_dsym_and_run_command(self):
     20         """Test 'b basic_types.cpp:176' does break (where int.cpp includes basic_type.cpp)."""
     21         self.buildDsym()
     22         self.inlined_breakpoints()
     23 
     24     @dwarf_test
     25     def test_with_dwarf_and_run_command(self):
     26         """Test 'b basic_types.cpp:176' does break (where int.cpp includes basic_type.cpp)."""
     27         self.buildDwarf()
     28         self.inlined_breakpoints()
     29 
     30     def setUp(self):
     31         # Call super's setUp().
     32         TestBase.setUp(self)
     33         # Find the line number to break inside basic_type.cpp.
     34         self.line = line_number('basic_type.cpp', '// Set break point at this line.')
     35 
     36     def inlined_breakpoints(self):
     37         """Test 'b basic_types.cpp:176' does break (where int.cpp includes basic_type.cpp)."""
     38         exe = os.path.join(os.getcwd(), "a.out")
     39         self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
     40 
     41         # Set a breakpoint and fail because it is in an inlined source implemenation file
     42         lldbutil.run_break_set_by_file_and_line (self, "basic_type.cpp", self.line, num_expected_locations=0)
     43 
     44         # Now enable breakpoints in implementation files and see the breakpoint set succeed
     45         self.runCmd('settings set target.inline-breakpoint-strategy always')
     46         # And add hooks to restore the settings during tearDown().
     47         self.addTearDownHook(
     48             lambda: self.runCmd("settings set target.inline-breakpoint-strategy headers"))
     49 
     50         lldbutil.run_break_set_by_file_and_line (self, "basic_type.cpp", self.line, num_expected_locations=1, loc_exact=True)
     51 
     52         self.runCmd("run", RUN_SUCCEEDED)
     53 
     54         # The stop reason of the thread should be breakpoint.
     55         # And it should break at basic_type.cpp:176.
     56         self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
     57             substrs = ['stopped',
     58                        'stop reason = breakpoint',
     59                        'basic_type.cpp:%d' % self.line])
     60 
     61 
     62 if __name__ == '__main__':
     63     import atexit
     64     lldb.SBDebugger.Initialize()
     65     atexit.register(lambda: lldb.SBDebugger.Terminate())
     66     unittest2.main()
     67