13b44c9afSMichael Buchimport lldb 23b44c9afSMichael Buchimport os 33b44c9afSMichael Buchfrom lldbsuite.test.decorators import * 43b44c9afSMichael Buchfrom lldbsuite.test.lldbtest import * 53b44c9afSMichael Buchfrom lldbsuite.test import lldbutil 63b44c9afSMichael Buch 73b44c9afSMichael Buch 83b44c9afSMichael Buchclass TestWithGmodulesDebugInfo(TestBase): 93b44c9afSMichael Buch @skipIf(bugnumber="llvm.org/pr36146", oslist=["linux"], archs=["i386"]) 103b44c9afSMichael Buch @add_test_categories(["gmodules"]) 113b44c9afSMichael Buch def test_specialized_typedef_from_pch(self): 123b44c9afSMichael Buch self.build() 133b44c9afSMichael Buch 143b44c9afSMichael Buch src_file = os.path.join(self.getSourceDir(), "main.cpp") 153b44c9afSMichael Buch src_file_spec = lldb.SBFileSpec(src_file) 163b44c9afSMichael Buch self.assertTrue(src_file_spec.IsValid(), "breakpoint file") 173b44c9afSMichael Buch 183b44c9afSMichael Buch # Get the path of the executable 193b44c9afSMichael Buch exe_path = self.getBuildArtifact("a.out") 203b44c9afSMichael Buch 213b44c9afSMichael Buch # Load the executable 223b44c9afSMichael Buch target = self.dbg.CreateTarget(exe_path) 233b44c9afSMichael Buch self.assertTrue(target.IsValid(), VALID_TARGET) 243b44c9afSMichael Buch 253b44c9afSMichael Buch # Break on interesting line 26*2238dcc3SJonas Devlieghere breakpoint = target.BreakpointCreateBySourceRegex("break here", src_file_spec) 273b44c9afSMichael Buch self.assertTrue( 28*2238dcc3SJonas Devlieghere breakpoint.IsValid() and breakpoint.GetNumLocations() >= 1, VALID_BREAKPOINT 29*2238dcc3SJonas Devlieghere ) 303b44c9afSMichael Buch 313b44c9afSMichael Buch # Launch the process 32*2238dcc3SJonas Devlieghere process = target.LaunchSimple(None, None, self.get_process_working_directory()) 333b44c9afSMichael Buch self.assertTrue(process.IsValid(), PROCESS_IS_VALID) 343b44c9afSMichael Buch 353b44c9afSMichael Buch # Get the thread of the process 363b44c9afSMichael Buch self.assertState(process.GetState(), lldb.eStateStopped) 37*2238dcc3SJonas Devlieghere thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) 383b44c9afSMichael Buch self.assertTrue( 393b44c9afSMichael Buch thread.IsValid(), 40*2238dcc3SJonas Devlieghere "There should be a thread stopped due to breakpoint condition", 41*2238dcc3SJonas Devlieghere ) 423b44c9afSMichael Buch 433b44c9afSMichael Buch # Get frame for current thread 443b44c9afSMichael Buch frame = thread.frames[0] 453b44c9afSMichael Buch 463b44c9afSMichael Buch testValue = frame.EvaluateExpression("test") 473b44c9afSMichael Buch self.assertTrue( 483b44c9afSMichael Buch testValue.GetError().Success(), 49*2238dcc3SJonas Devlieghere "Test expression value invalid: %s" % (testValue.GetError().GetCString()), 50*2238dcc3SJonas Devlieghere ) 513b44c9afSMichael Buch self.assertEqual( 52*2238dcc3SJonas Devlieghere testValue.GetTypeName(), "IntContainer", "Test expression type incorrect" 53*2238dcc3SJonas Devlieghere ) 543b44c9afSMichael Buch 553b44c9afSMichael Buch memberValue = testValue.GetChildMemberWithName("storage") 563b44c9afSMichael Buch self.assertTrue( 573b44c9afSMichael Buch memberValue.GetError().Success(), 58*2238dcc3SJonas Devlieghere "Member value missing or invalid: %s" % (testValue.GetError().GetCString()), 59*2238dcc3SJonas Devlieghere ) 60*2238dcc3SJonas Devlieghere self.assertEqual(memberValue.GetTypeName(), "int", "Member type incorrect") 61*2238dcc3SJonas Devlieghere self.assertEqual(42, memberValue.GetValueAsSigned(), "Member value incorrect") 623b44c9afSMichael Buch 633b44c9afSMichael Buch testValue = frame.EvaluateExpression("bar") 643b44c9afSMichael Buch self.assertTrue( 653b44c9afSMichael Buch testValue.GetError().Success(), 66*2238dcc3SJonas Devlieghere "Test expression value invalid: %s" % (testValue.GetError().GetCString()), 67*2238dcc3SJonas Devlieghere ) 683b44c9afSMichael Buch self.assertEqual( 69*2238dcc3SJonas Devlieghere testValue.GetTypeName(), "Foo::Bar", "Test expression type incorrect" 70*2238dcc3SJonas Devlieghere ) 713b44c9afSMichael Buch 723b44c9afSMichael Buch memberValue = testValue.GetChildMemberWithName("i") 733b44c9afSMichael Buch self.assertTrue( 743b44c9afSMichael Buch memberValue.GetError().Success(), 75*2238dcc3SJonas Devlieghere "Member value missing or invalid: %s" % (testValue.GetError().GetCString()), 76*2238dcc3SJonas Devlieghere ) 77*2238dcc3SJonas Devlieghere self.assertEqual(memberValue.GetTypeName(), "int", "Member type incorrect") 78*2238dcc3SJonas Devlieghere self.assertEqual(123, memberValue.GetValueAsSigned(), "Member value incorrect") 79