[Lldb-commits] [lldb] r146216 - in /lldb/trunk/test/lang/objc/real-definition: Bar.m Foo.m TestRealDefinition.py main.m

Greg Clayton gclayton at apple.com
Thu Dec 8 16:58:34 PST 2011


Author: gclayton
Date: Thu Dec  8 18:58:33 2011
New Revision: 146216

URL: http://llvm.org/viewvc/llvm-project?rev=146216&view=rev
Log:
We now have a test case for stopping within a module in a place where the
translation unit has a interface for a class "Bar" that contains hidden ivars
in the implementation and we make sure we can see these hidden ivars. We also
test the case where we stop in translation unit that contains the 
implementation first. So the test runs two tests:

1 - run and stop where we have an interface, run to main and print and make
    sure we find the hidden ivar
2 - run and stop where we have an implementation, run to main and print and make
    sure we find the hidden ivar
    

Added:
    lldb/trunk/test/lang/objc/real-definition/TestRealDefinition.py
Modified:
    lldb/trunk/test/lang/objc/real-definition/Bar.m
    lldb/trunk/test/lang/objc/real-definition/Foo.m
    lldb/trunk/test/lang/objc/real-definition/main.m

Modified: lldb/trunk/test/lang/objc/real-definition/Bar.m
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/real-definition/Bar.m?rev=146216&r1=146215&r2=146216&view=diff
==============================================================================
--- lldb/trunk/test/lang/objc/real-definition/Bar.m (original)
+++ lldb/trunk/test/lang/objc/real-definition/Bar.m Thu Dec  8 18:58:33 2011
@@ -25,7 +25,7 @@
     if (self) {
         _hidden_ivar = [NSString stringWithFormat:@"%p: @Bar", self];
     }
-    return self;    
+    return self; // Set breakpoint where Bar is an implementation
 }
 
 - (void)dealloc

Modified: lldb/trunk/test/lang/objc/real-definition/Foo.m
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/real-definition/Foo.m?rev=146216&r1=146215&r2=146216&view=diff
==============================================================================
--- lldb/trunk/test/lang/objc/real-definition/Foo.m (original)
+++ lldb/trunk/test/lang/objc/real-definition/Foo.m Thu Dec  8 18:58:33 2011
@@ -8,7 +8,7 @@
     if (self) {
         _bar = [[Bar alloc] init];
     }
-    return self;    
+    return self; // Set breakpoint where Bar is an interface
 }
 
 - (void)dealloc

Added: lldb/trunk/test/lang/objc/real-definition/TestRealDefinition.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/real-definition/TestRealDefinition.py?rev=146216&view=auto
==============================================================================
--- lldb/trunk/test/lang/objc/real-definition/TestRealDefinition.py (added)
+++ lldb/trunk/test/lang/objc/real-definition/TestRealDefinition.py Thu Dec  8 18:58:33 2011
@@ -0,0 +1,102 @@
+"""Test that types defined in shared libraries work correctly."""
+
+import os, time
+import unittest2
+import lldb
+from lldbtest import *
+
+class TestRealDefinition(TestBase):
+
+    mydir = os.path.join("lang", "objc", "real-definition")
+
+    def test_expr_with_dsym(self):
+        """Test that we can find the implementation for an objective C type"""
+        self.buildDsym()
+        self.stop_at_interface()
+
+    def test_expr_with_dwarf(self):
+        """Test that we can find the implementation for an objective C type"""
+        self.buildDwarf()
+        self.stop_at_interface()
+
+    def test_frame_variable_with_dsym(self):
+        """Test that we can find the implementation for an objective C type"""
+        self.buildDsym()
+        self.stop_at_implementation()
+
+    def test_frame_variable_with_dwarf(self):
+        """Test that we can find the implementation for an objective C type"""
+        self.buildDwarf()
+        self.stop_at_implementation()
+
+    def setUp(self):
+        # Call super's setUp().
+        TestBase.setUp(self)
+
+    def common_setup(self):
+        exe = os.path.join(os.getcwd(), "a.out")
+        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
+
+        # Break inside the foo function which takes a bar_ptr argument.
+        self.expect("breakpoint set -f main.m -l %d" % line_number('main.m', '// Set breakpoint in main'), BREAKPOINT_CREATED, startstr = "Breakpoint created")
+
+    def stop_at_interface(self):
+        """Test that we can find the implementation for an objective C type when we stop in the interface"""
+        self.common_setup()
+
+        self.expect("breakpoint set -f Foo.m -l %d" % line_number('Foo.m', '// Set breakpoint where Bar is an interface'), BREAKPOINT_CREATED, startstr = "Breakpoint created")
+
+        self.runCmd("run", RUN_SUCCEEDED)
+
+        # The stop reason of the thread should be breakpoint.
+        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+            substrs = ['stopped',
+                       'stop reason = breakpoint'])
+
+        # Run and stop at Foo
+        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
+            substrs = [' resolved, hit count = 1'])
+
+        self.runCmd("continue", RUN_SUCCEEDED)
+
+        # Run at stop at main
+        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
+            substrs = [' resolved, hit count = 1'])
+            
+        # This should display correctly.
+        self.expect("frame variable foo->_bar->_hidden_ivar", VARIABLES_DISPLAYED_CORRECTLY,
+            substrs = ["(NSString *)", "foo->_bar->_hidden_ivar = 0x"])
+
+    def stop_at_implementation(self):
+        """Test that we can find the implementation for an objective C type when we stop in the implementation"""
+        self.common_setup()
+
+        self.expect("breakpoint set -f Bar.m -l %d" % line_number('Bar.m', '// Set breakpoint where Bar is an implementation'), BREAKPOINT_CREATED, startstr = "Breakpoint created")
+
+        self.runCmd("run", RUN_SUCCEEDED)
+
+        # The stop reason of the thread should be breakpoint.
+        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+            substrs = ['stopped',
+                       'stop reason = breakpoint'])
+
+        # Run and stop at Foo
+        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
+            substrs = [' resolved, hit count = 1'])
+
+        self.runCmd("continue", RUN_SUCCEEDED)
+
+        # Run at stop at main
+        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
+            substrs = [' resolved, hit count = 1'])
+
+        # This should display correctly.
+        self.expect("frame variable foo->_bar->_hidden_ivar", VARIABLES_DISPLAYED_CORRECTLY,
+            substrs = ["(NSString *)", "foo->_bar->_hidden_ivar = 0x"])
+
+                       
+if __name__ == '__main__':
+    import atexit
+    lldb.SBDebugger.Initialize()
+    atexit.register(lambda: lldb.SBDebugger.Terminate())
+    unittest2.main()

Modified: lldb/trunk/test/lang/objc/real-definition/main.m
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/objc/real-definition/main.m?rev=146216&r1=146215&r2=146216&view=diff
==============================================================================
--- lldb/trunk/test/lang/objc/real-definition/main.m (original)
+++ lldb/trunk/test/lang/objc/real-definition/main.m Thu Dec  8 18:58:33 2011
@@ -7,7 +7,7 @@
 {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     Foo *foo = [[Foo alloc] init];
-    NSLog (@"foo is %@", foo);
+    NSLog (@"foo is %@", foo); // Set breakpoint in main
     [pool release];
     return 0;
 }





More information about the lldb-commits mailing list