199451b44SJordan Rupprechtimport lldb
299451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
399451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
499451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
599451b44SJordan Rupprecht
699451b44SJordan Rupprecht
799451b44SJordan Rupprechtclass TestWithLimitDebugInfo(TestBase):
899451b44SJordan Rupprecht
9*089a1d9dSPavel Labath    @add_test_categories(["dwarf", "dwo"])
1099451b44SJordan Rupprecht    def test_limit_debug_info(self):
1199451b44SJordan Rupprecht        self.build()
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprecht        src_file = os.path.join(self.getSourceDir(), "main.cpp")
1499451b44SJordan Rupprecht        src_file_spec = lldb.SBFileSpec(src_file)
1599451b44SJordan Rupprecht        self.assertTrue(src_file_spec.IsValid(), "breakpoint file")
1699451b44SJordan Rupprecht
1799451b44SJordan Rupprecht        # Get the path of the executable
1899451b44SJordan Rupprecht        exe_path = self.getBuildArtifact("a.out")
1999451b44SJordan Rupprecht
2099451b44SJordan Rupprecht        # Load the executable
2199451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe_path)
2299451b44SJordan Rupprecht        self.assertTrue(target.IsValid(), VALID_TARGET)
2399451b44SJordan Rupprecht
2499451b44SJordan Rupprecht        # Break on main function
2599451b44SJordan Rupprecht        breakpoint = target.BreakpointCreateBySourceRegex(
2699451b44SJordan Rupprecht            "break here", src_file_spec)
2799451b44SJordan Rupprecht        self.assertTrue(
2899451b44SJordan Rupprecht            breakpoint.IsValid() and breakpoint.GetNumLocations() >= 1,
2999451b44SJordan Rupprecht            VALID_BREAKPOINT)
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht        # Launch the process
3299451b44SJordan Rupprecht        process = target.LaunchSimple(
3399451b44SJordan Rupprecht            None, None, self.get_process_working_directory())
3499451b44SJordan Rupprecht        self.assertTrue(process.IsValid(), PROCESS_IS_VALID)
3599451b44SJordan Rupprecht
3699451b44SJordan Rupprecht        # Get the thread of the process
370ed758b2SDave Lee        self.assertEqual(
380ed758b2SDave Lee            process.GetState(), lldb.eStateStopped,
3999451b44SJordan Rupprecht            PROCESS_STOPPED)
4099451b44SJordan Rupprecht        thread = lldbutil.get_stopped_thread(
4199451b44SJordan Rupprecht            process, lldb.eStopReasonBreakpoint)
4299451b44SJordan Rupprecht        thread.StepInto()
4399451b44SJordan Rupprecht
4499451b44SJordan Rupprecht        # Get frame for current thread
4599451b44SJordan Rupprecht        frame = thread.GetSelectedFrame()
4699451b44SJordan Rupprecht
4799451b44SJordan Rupprecht        self.expect_expr("1", result_type="int", result_value="1")
4899451b44SJordan Rupprecht
4999451b44SJordan Rupprecht        v2 = frame.EvaluateExpression("this")
5099451b44SJordan Rupprecht        self.assertTrue(
5199451b44SJordan Rupprecht            v2.IsValid(),
5299451b44SJordan Rupprecht            "'expr this' results in a valid SBValue object")
53*089a1d9dSPavel Labath        self.assertSuccess(
54*089a1d9dSPavel Labath            v2.GetError(),
5599451b44SJordan Rupprecht            "'expr this' succeeds without an error.")
56