1*99451b44SJordan Rupprechtimport lldb 2*99451b44SJordan Rupprechtimport os 3*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 4*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 5*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprecht 8*99451b44SJordan Rupprechtclass TestWithGmodulesDebugInfo(TestBase): 9*99451b44SJordan Rupprecht 10*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprecht @skipIf(bugnumber="llvm.org/pr36146", oslist=["linux"], archs=["i386"]) 13*99451b44SJordan Rupprecht @add_test_categories(["gmodules"]) 14*99451b44SJordan Rupprecht def test_specialized_typedef_from_pch(self): 15*99451b44SJordan Rupprecht self.build() 16*99451b44SJordan Rupprecht 17*99451b44SJordan Rupprecht src_file = os.path.join(self.getSourceDir(), "main.cpp") 18*99451b44SJordan Rupprecht src_file_spec = lldb.SBFileSpec(src_file) 19*99451b44SJordan Rupprecht self.assertTrue(src_file_spec.IsValid(), "breakpoint file") 20*99451b44SJordan Rupprecht 21*99451b44SJordan Rupprecht # Get the path of the executable 22*99451b44SJordan Rupprecht exe_path = self.getBuildArtifact("a.out") 23*99451b44SJordan Rupprecht 24*99451b44SJordan Rupprecht # Load the executable 25*99451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe_path) 26*99451b44SJordan Rupprecht self.assertTrue(target.IsValid(), VALID_TARGET) 27*99451b44SJordan Rupprecht 28*99451b44SJordan Rupprecht # Break on interesting line 29*99451b44SJordan Rupprecht breakpoint = target.BreakpointCreateBySourceRegex( 30*99451b44SJordan Rupprecht "break here", src_file_spec) 31*99451b44SJordan Rupprecht self.assertTrue( 32*99451b44SJordan Rupprecht breakpoint.IsValid() and breakpoint.GetNumLocations() >= 1, 33*99451b44SJordan Rupprecht VALID_BREAKPOINT) 34*99451b44SJordan Rupprecht 35*99451b44SJordan Rupprecht # Launch the process 36*99451b44SJordan Rupprecht process = target.LaunchSimple( 37*99451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 38*99451b44SJordan Rupprecht self.assertTrue(process.IsValid(), PROCESS_IS_VALID) 39*99451b44SJordan Rupprecht 40*99451b44SJordan Rupprecht # Get the thread of the process 41*99451b44SJordan Rupprecht self.assertTrue(process.GetState() == lldb.eStateStopped) 42*99451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread( 43*99451b44SJordan Rupprecht process, lldb.eStopReasonBreakpoint) 44*99451b44SJordan Rupprecht self.assertTrue( 45*99451b44SJordan Rupprecht thread.IsValid(), 46*99451b44SJordan Rupprecht "There should be a thread stopped due to breakpoint condition") 47*99451b44SJordan Rupprecht 48*99451b44SJordan Rupprecht # Get frame for current thread 49*99451b44SJordan Rupprecht frame = thread.frames[0] 50*99451b44SJordan Rupprecht 51*99451b44SJordan Rupprecht testValue = frame.EvaluateExpression("test") 52*99451b44SJordan Rupprecht self.assertTrue( 53*99451b44SJordan Rupprecht testValue.GetError().Success(), 54*99451b44SJordan Rupprecht "Test expression value invalid: %s" % 55*99451b44SJordan Rupprecht (testValue.GetError().GetCString())) 56*99451b44SJordan Rupprecht self.assertTrue( 57*99451b44SJordan Rupprecht testValue.GetTypeName() == "IntContainer", 58*99451b44SJordan Rupprecht "Test expression type incorrect") 59*99451b44SJordan Rupprecht 60*99451b44SJordan Rupprecht memberValue = testValue.GetChildMemberWithName("storage") 61*99451b44SJordan Rupprecht self.assertTrue( 62*99451b44SJordan Rupprecht memberValue.GetError().Success(), 63*99451b44SJordan Rupprecht "Member value missing or invalid: %s" % 64*99451b44SJordan Rupprecht (testValue.GetError().GetCString())) 65*99451b44SJordan Rupprecht self.assertTrue( 66*99451b44SJordan Rupprecht memberValue.GetTypeName() == "int", 67*99451b44SJordan Rupprecht "Member type incorrect") 68*99451b44SJordan Rupprecht self.assertEqual( 69*99451b44SJordan Rupprecht 42, 70*99451b44SJordan Rupprecht memberValue.GetValueAsSigned(), 71*99451b44SJordan Rupprecht "Member value incorrect") 72*99451b44SJordan Rupprecht 73*99451b44SJordan Rupprecht testValue = frame.EvaluateExpression("bar") 74*99451b44SJordan Rupprecht self.assertTrue( 75*99451b44SJordan Rupprecht testValue.GetError().Success(), 76*99451b44SJordan Rupprecht "Test expression value invalid: %s" % 77*99451b44SJordan Rupprecht (testValue.GetError().GetCString())) 78*99451b44SJordan Rupprecht self.assertTrue( 79*99451b44SJordan Rupprecht testValue.GetTypeName() == "Foo::Bar", 80*99451b44SJordan Rupprecht "Test expression type incorrect") 81*99451b44SJordan Rupprecht 82*99451b44SJordan Rupprecht memberValue = testValue.GetChildMemberWithName("i") 83*99451b44SJordan Rupprecht self.assertTrue( 84*99451b44SJordan Rupprecht memberValue.GetError().Success(), 85*99451b44SJordan Rupprecht "Member value missing or invalid: %s" % 86*99451b44SJordan Rupprecht (testValue.GetError().GetCString())) 87*99451b44SJordan Rupprecht self.assertTrue( 88*99451b44SJordan Rupprecht memberValue.GetTypeName() == "int", 89*99451b44SJordan Rupprecht "Member type incorrect") 90*99451b44SJordan Rupprecht self.assertEqual( 91*99451b44SJordan Rupprecht 123, 92*99451b44SJordan Rupprecht memberValue.GetValueAsSigned(), 93*99451b44SJordan Rupprecht "Member value incorrect") 94*99451b44SJordan Rupprecht 95