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 @skipIf(bugnumber="llvm.org/pr36146", oslist=["linux"], archs=["i386"]) 1199451b44SJordan Rupprecht @add_test_categories(["gmodules"]) 1299451b44SJordan Rupprecht def test_specialized_typedef_from_pch(self): 1399451b44SJordan Rupprecht self.build() 1499451b44SJordan Rupprecht 1599451b44SJordan Rupprecht src_file = os.path.join(self.getSourceDir(), "main.cpp") 1699451b44SJordan Rupprecht src_file_spec = lldb.SBFileSpec(src_file) 1799451b44SJordan Rupprecht self.assertTrue(src_file_spec.IsValid(), "breakpoint file") 1899451b44SJordan Rupprecht 1999451b44SJordan Rupprecht # Get the path of the executable 2099451b44SJordan Rupprecht exe_path = self.getBuildArtifact("a.out") 2199451b44SJordan Rupprecht 2299451b44SJordan Rupprecht # Load the executable 2399451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe_path) 2499451b44SJordan Rupprecht self.assertTrue(target.IsValid(), VALID_TARGET) 2599451b44SJordan Rupprecht 2699451b44SJordan Rupprecht # Break on interesting line 2799451b44SJordan Rupprecht breakpoint = target.BreakpointCreateBySourceRegex( 2899451b44SJordan Rupprecht "break here", src_file_spec) 2999451b44SJordan Rupprecht self.assertTrue( 3099451b44SJordan Rupprecht breakpoint.IsValid() and breakpoint.GetNumLocations() >= 1, 3199451b44SJordan Rupprecht VALID_BREAKPOINT) 3299451b44SJordan Rupprecht 3399451b44SJordan Rupprecht # Launch the process 3499451b44SJordan Rupprecht process = target.LaunchSimple( 3599451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 3699451b44SJordan Rupprecht self.assertTrue(process.IsValid(), PROCESS_IS_VALID) 3799451b44SJordan Rupprecht 3899451b44SJordan Rupprecht # Get the thread of the process 39*ce825e46SJonas Devlieghere self.assertState(process.GetState(), lldb.eStateStopped) 4099451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread( 4199451b44SJordan Rupprecht process, lldb.eStopReasonBreakpoint) 4299451b44SJordan Rupprecht self.assertTrue( 4399451b44SJordan Rupprecht thread.IsValid(), 4499451b44SJordan Rupprecht "There should be a thread stopped due to breakpoint condition") 4599451b44SJordan Rupprecht 4699451b44SJordan Rupprecht # Get frame for current thread 4799451b44SJordan Rupprecht frame = thread.frames[0] 4899451b44SJordan Rupprecht 4999451b44SJordan Rupprecht testValue = frame.EvaluateExpression("test") 5099451b44SJordan Rupprecht self.assertTrue( 5199451b44SJordan Rupprecht testValue.GetError().Success(), 5299451b44SJordan Rupprecht "Test expression value invalid: %s" % 5399451b44SJordan Rupprecht (testValue.GetError().GetCString())) 540ed758b2SDave Lee self.assertEqual( 550ed758b2SDave Lee testValue.GetTypeName(), "IntContainer", 5699451b44SJordan Rupprecht "Test expression type incorrect") 5799451b44SJordan Rupprecht 5899451b44SJordan Rupprecht memberValue = testValue.GetChildMemberWithName("storage") 5999451b44SJordan Rupprecht self.assertTrue( 6099451b44SJordan Rupprecht memberValue.GetError().Success(), 6199451b44SJordan Rupprecht "Member value missing or invalid: %s" % 6299451b44SJordan Rupprecht (testValue.GetError().GetCString())) 630ed758b2SDave Lee self.assertEqual( 640ed758b2SDave Lee memberValue.GetTypeName(), "int", 6599451b44SJordan Rupprecht "Member type incorrect") 6699451b44SJordan Rupprecht self.assertEqual( 6799451b44SJordan Rupprecht 42, 6899451b44SJordan Rupprecht memberValue.GetValueAsSigned(), 6999451b44SJordan Rupprecht "Member value incorrect") 7099451b44SJordan Rupprecht 7199451b44SJordan Rupprecht testValue = frame.EvaluateExpression("bar") 7299451b44SJordan Rupprecht self.assertTrue( 7399451b44SJordan Rupprecht testValue.GetError().Success(), 7499451b44SJordan Rupprecht "Test expression value invalid: %s" % 7599451b44SJordan Rupprecht (testValue.GetError().GetCString())) 760ed758b2SDave Lee self.assertEqual( 770ed758b2SDave Lee testValue.GetTypeName(), "Foo::Bar", 7899451b44SJordan Rupprecht "Test expression type incorrect") 7999451b44SJordan Rupprecht 8099451b44SJordan Rupprecht memberValue = testValue.GetChildMemberWithName("i") 8199451b44SJordan Rupprecht self.assertTrue( 8299451b44SJordan Rupprecht memberValue.GetError().Success(), 8399451b44SJordan Rupprecht "Member value missing or invalid: %s" % 8499451b44SJordan Rupprecht (testValue.GetError().GetCString())) 850ed758b2SDave Lee self.assertEqual( 860ed758b2SDave Lee memberValue.GetTypeName(), "int", 8799451b44SJordan Rupprecht "Member type incorrect") 8899451b44SJordan Rupprecht self.assertEqual( 8999451b44SJordan Rupprecht 123, 9099451b44SJordan Rupprecht memberValue.GetValueAsSigned(), 9199451b44SJordan Rupprecht "Member value incorrect") 9299451b44SJordan Rupprecht 93