199451b44SJordan Rupprechtimport lldb 299451b44SJordan Rupprechtimport os 399451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 499451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 599451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 699451b44SJordan Rupprecht 799451b44SJordan Rupprecht 899451b44SJordan Rupprechtclass TestWithGmodulesDebugInfo(TestBase): 999451b44SJordan Rupprecht 1099451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht @skipIf(bugnumber="llvm.org/pr36146", oslist=["linux"], archs=["i386"]) 1399451b44SJordan Rupprecht @add_test_categories(["gmodules"]) 1499451b44SJordan Rupprecht def test_specialized_typedef_from_pch(self): 1599451b44SJordan Rupprecht self.build() 1699451b44SJordan Rupprecht 1799451b44SJordan Rupprecht src_file = os.path.join(self.getSourceDir(), "main.cpp") 1899451b44SJordan Rupprecht src_file_spec = lldb.SBFileSpec(src_file) 1999451b44SJordan Rupprecht self.assertTrue(src_file_spec.IsValid(), "breakpoint file") 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht # Get the path of the executable 2299451b44SJordan Rupprecht exe_path = self.getBuildArtifact("a.out") 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht # Load the executable 2599451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe_path) 2699451b44SJordan Rupprecht self.assertTrue(target.IsValid(), VALID_TARGET) 2799451b44SJordan Rupprecht 2899451b44SJordan Rupprecht # Break on interesting line 2999451b44SJordan Rupprecht breakpoint = target.BreakpointCreateBySourceRegex( 3099451b44SJordan Rupprecht "break here", src_file_spec) 3199451b44SJordan Rupprecht self.assertTrue( 3299451b44SJordan Rupprecht breakpoint.IsValid() and breakpoint.GetNumLocations() >= 1, 3399451b44SJordan Rupprecht VALID_BREAKPOINT) 3499451b44SJordan Rupprecht 3599451b44SJordan Rupprecht # Launch the process 3699451b44SJordan Rupprecht process = target.LaunchSimple( 3799451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 3899451b44SJordan Rupprecht self.assertTrue(process.IsValid(), PROCESS_IS_VALID) 3999451b44SJordan Rupprecht 4099451b44SJordan Rupprecht # Get the thread of the process 41*ce825e46SJonas Devlieghere self.assertState(process.GetState(), lldb.eStateStopped) 4299451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread( 4399451b44SJordan Rupprecht process, lldb.eStopReasonBreakpoint) 4499451b44SJordan Rupprecht self.assertTrue( 4599451b44SJordan Rupprecht thread.IsValid(), 4699451b44SJordan Rupprecht "There should be a thread stopped due to breakpoint condition") 4799451b44SJordan Rupprecht 4899451b44SJordan Rupprecht # Get frame for current thread 4999451b44SJordan Rupprecht frame = thread.frames[0] 5099451b44SJordan Rupprecht 5199451b44SJordan Rupprecht testValue = frame.EvaluateExpression("test") 5299451b44SJordan Rupprecht self.assertTrue( 5399451b44SJordan Rupprecht testValue.GetError().Success(), 5499451b44SJordan Rupprecht "Test expression value invalid: %s" % 5599451b44SJordan Rupprecht (testValue.GetError().GetCString())) 560ed758b2SDave Lee self.assertEqual( 570ed758b2SDave Lee testValue.GetTypeName(), "IntContainer", 5899451b44SJordan Rupprecht "Test expression type incorrect") 5999451b44SJordan Rupprecht 6099451b44SJordan Rupprecht memberValue = testValue.GetChildMemberWithName("storage") 6199451b44SJordan Rupprecht self.assertTrue( 6299451b44SJordan Rupprecht memberValue.GetError().Success(), 6399451b44SJordan Rupprecht "Member value missing or invalid: %s" % 6499451b44SJordan Rupprecht (testValue.GetError().GetCString())) 650ed758b2SDave Lee self.assertEqual( 660ed758b2SDave Lee memberValue.GetTypeName(), "int", 6799451b44SJordan Rupprecht "Member type incorrect") 6899451b44SJordan Rupprecht self.assertEqual( 6999451b44SJordan Rupprecht 42, 7099451b44SJordan Rupprecht memberValue.GetValueAsSigned(), 7199451b44SJordan Rupprecht "Member value incorrect") 7299451b44SJordan Rupprecht 7399451b44SJordan Rupprecht testValue = frame.EvaluateExpression("bar") 7499451b44SJordan Rupprecht self.assertTrue( 7599451b44SJordan Rupprecht testValue.GetError().Success(), 7699451b44SJordan Rupprecht "Test expression value invalid: %s" % 7799451b44SJordan Rupprecht (testValue.GetError().GetCString())) 780ed758b2SDave Lee self.assertEqual( 790ed758b2SDave Lee testValue.GetTypeName(), "Foo::Bar", 8099451b44SJordan Rupprecht "Test expression type incorrect") 8199451b44SJordan Rupprecht 8299451b44SJordan Rupprecht memberValue = testValue.GetChildMemberWithName("i") 8399451b44SJordan Rupprecht self.assertTrue( 8499451b44SJordan Rupprecht memberValue.GetError().Success(), 8599451b44SJordan Rupprecht "Member value missing or invalid: %s" % 8699451b44SJordan Rupprecht (testValue.GetError().GetCString())) 870ed758b2SDave Lee self.assertEqual( 880ed758b2SDave Lee memberValue.GetTypeName(), "int", 8999451b44SJordan Rupprecht "Member type incorrect") 9099451b44SJordan Rupprecht self.assertEqual( 9199451b44SJordan Rupprecht 123, 9299451b44SJordan Rupprecht memberValue.GetValueAsSigned(), 9399451b44SJordan Rupprecht "Member value incorrect") 9499451b44SJordan Rupprecht 95