On Jul 21, 2011, at 6:40 PM, Corbin Dunn wrote:

> Log the address of your object. Then, break in gdb and do:
> 
> info gc-roots <address>
> 
> Then see what is rooting it. also, try gc-references in it to see what 
> references it, but roots are more important.

Thanks, Corbin. I'm trying to understand the output of gc-roots. On 10.6, for 
the NSDocument subclass (CCMDoc) instance I get this:

(gdb) info gc-roots 0x1670a40
Number of roots: 1
Root:
   0 Kind: bytes   rc: -1847835481  Address: 0x01670a40

On 10.7, I get unpredictable results. Sometimes there is one root, and 
sometimes there are several. Here is a short output:

(gdb) info gc-roots 0x1824f00
Number of roots: 1
Root:
   0 Kind: bytes   rc:   1  Address: 0x011ee790  Offset: 0x00000014
   1 Kind: object  rc:   0  Address: 0x014a65d0  Class: CCMDocumentWindow  
ivar: NSWindow.NSResponder
   2 Kind: object  rc:   0  Address: 0x01b11e60  Class: CCMWindowCtl  ivar: 
_paletteGroups
   3 Kind: object  rc:   0  Address: 0x014d7950  Class: NSView  Offset: 
0x0000002c
   4 Kind: object  rc:   0  Address: 0x01f28db0  Offset: 0x00000014  Class: 
__NSArrayM
   5 Kind: bytes   rc:   0  Address: 0x01f28fa0
   6 Kind: object  rc:   0  Address: 0x018b9490  Class: CCMPaletteGroup  ivar: 
NSView._subviews
   7 Kind: object  rc:   0  Address: 0x01f1cdb0  Offset: 0x00000014  Class: 
__NSArrayM
   8 Kind: bytes   rc:   0  Address: 0x01f27d30  Offset: 0x0000000c
   9 Kind: object  rc:   0  Address: 0x014cda10  Class: CCMCollapsingView  
ivar: NSView._subviews
  10 Kind: object  rc:   0  Address: 0x014c8cb0  Offset: 0x00000014  Class: 
__NSArrayM
  11 Kind: bytes   rc:   0  Address: 0x014c9b10  Offset: 0x00000008
  12 Kind: object  rc:   0  Address: 0x014c77f0  Class: 
CCMUnitTextFieldPointsOnly  ivar: CCMUnitTextField.NSTextField.NSControl
  13 Kind: object  rc:   0  Address: 0x014fcb00  Class: NSTextFieldCell  ivar: 
NSActionCell
  14 Kind: object  rc:   0  Address: 0x014ea670  Offset: 0x0000004c  Class: 
NSKVONotifying_CCMFormatCtl
  15 Kind: object  rc:   0  Address: 0x01824f00  Offset: 0x00000000  Class: 
NSKVONotifying_CCMDoc

and here is a long one:

(gdb) info gc-roots 0x1827500
Number of roots: 5
Root:
   0 Kind: bytes   rc:   1  Address: 0x0143ec20  Offset: 0x00000014
   1 Kind: bytes   rc:   0  Address: 0x0143ed60  Offset: 0x00000014
   2 Kind: object  rc:   0  Address: 0x018df290  Class: CCMTextViewFooter  
ivar: CCMTextViewSection.CCMTextView.NSTextView.NSText._ivars
   3 Kind: object  rc:   0  Address: 0x014b4d70  Offset: 0x00000014  Class: 
NSTextViewIvars
   4 Kind: object  rc:   0  Address: 0x018e0fc0  Class: CCMLayoutManager  
Offset: 0x000000d8
   5 Kind: object  rc:   0  Address: 0x01827500  Offset: 0x00000000  Class: 
NSKVONotifying_CCMDoc
Root:
   0 Kind: bytes   rc:   1  Address: 0x01443f20  Offset: 0x00000014
   1 Kind: bytes   rc:   0  Address: 0x01444500  Offset: 0x00000014
   2 Kind: object  rc:   0  Address: 0x018e1d50  Class: CCMTextViewHeader  
ivar: CCMTextViewSection.CCMTextView.NSTextView.NSText._ivars
   3 Kind: object  rc:   0  Address: 0x018f3280  Offset: 0x00000014  Class: 
NSTextViewIvars
   4 Kind: object  rc:   0  Address: 0x018e4730  Class: CCMLayoutManager  
Offset: 0x000000d8
   5 Kind: object  rc:   0  Address: 0x01827500  Offset: 0x00000000  Class: 
NSKVONotifying_CCMDoc
Root:
   0 Kind: bytes   rc:   1  Address: 0x011ab020  Offset: 0x00000014
   1 Kind: bytes   rc:   0  Address: 0x011ac2c0  Offset: 0x00000014
   2 Kind: object  rc:   0  Address: 0x01879770  Class: CCMTextViewColumn  
ivar: CCMTextView.NSTextView.NSText._ivars
   3 Kind: object  rc:   0  Address: 0x01853510  Offset: 0x00000014  Class: 
NSTextViewIvars
   4 Kind: object  rc:   0  Address: 0x018d7050  Class: CCMColumnLayoutManager  
ivar: CCMLayoutManager
   5 Kind: object  rc:   0  Address: 0x01827500  Offset: 0x00000000  Class: 
NSKVONotifying_CCMDoc
Root:
   0 Kind: bytes   rc:   1  Address: 0x01817670  Offset: 0x00000014
   1 Kind: object  rc:   0  Address: 0x0182a9a0  Class: CCMDocumentWindow  
ivar: NSWindow.NSResponder
   2 Kind: object  rc:   0  Address: 0x018321b0  Class: CCMWindowCtl  ivar: 
_paletteGroups
   3 Kind: object  rc:   0  Address: 0x01816fb0  Class: NSView  Offset: 
0x0000002c
   4 Kind: object  rc:   0  Address: 0x0183ad60  Offset: 0x00000014  Class: 
__NSArrayM
   5 Kind: bytes   rc:   0  Address: 0x018760d0
   6 Kind: object  rc:   0  Address: 0x01853a00  Class: CCMPaletteGroup  ivar: 
NSView._subviews
   7 Kind: object  rc:   0  Address: 0x014f6100  Offset: 0x00000014  Class: 
__NSArrayM
   8 Kind: bytes   rc:   0  Address: 0x01893110  Offset: 0x0000000c
   9 Kind: object  rc:   0  Address: 0x014db880  Class: CCMCollapsingView  
ivar: NSView._subviews
  10 Kind: object  rc:   0  Address: 0x014b1cd0  Offset: 0x00000014  Class: 
__NSArrayM
  11 Kind: bytes   rc:   0  Address: 0x014b23c0  Offset: 0x00000008
  12 Kind: object  rc:   0  Address: 0x01827330  Class: 
CCMUnitTextFieldPointsOnly  ivar: CCMUnitTextField.NSTextField.NSControl
  13 Kind: object  rc:   0  Address: 0x014e8520  Class: NSTextFieldCell  ivar: 
NSActionCell
  14 Kind: object  rc:   0  Address: 0x0182f5d0  Offset: 0x0000004c  Class: 
NSKVONotifying_CCMFormatCtl
  15 Kind: object  rc:   0  Address: 0x01827500  Offset: 0x00000000  Class: 
NSKVONotifying_CCMDoc
Root:
   0 Kind: bytes   rc:   1  Address: 0x014888b0  Offset: 0x00000014
   1 Kind: object  rc:   0  Address: 0x0182a9a0  Class: CCMDocumentWindow  
ivar: NSWindow.NSResponder
   2 Kind: object  rc:   0  Address: 0x018321b0  Class: CCMWindowCtl  ivar: 
_paletteGroups
   3 Kind: object  rc:   0  Address: 0x01816fb0  Class: NSView  Offset: 
0x0000002c
   4 Kind: object  rc:   0  Address: 0x0183ad60  Offset: 0x00000014  Class: 
__NSArrayM
   5 Kind: bytes   rc:   0  Address: 0x018760d0
   6 Kind: object  rc:   0  Address: 0x01853a00  Class: CCMPaletteGroup  ivar: 
NSView._subviews
   7 Kind: object  rc:   0  Address: 0x014f6100  Offset: 0x00000014  Class: 
__NSArrayM
   8 Kind: bytes   rc:   0  Address: 0x01893110  Offset: 0x0000000c
   9 Kind: object  rc:   0  Address: 0x014db880  Class: CCMCollapsingView  
ivar: NSView._subviews
  10 Kind: object  rc:   0  Address: 0x014b1cd0  Offset: 0x00000014  Class: 
__NSArrayM
  11 Kind: bytes   rc:   0  Address: 0x014b23c0  Offset: 0x00000008
  12 Kind: object  rc:   0  Address: 0x01827330  Class: 
CCMUnitTextFieldPointsOnly  ivar: CCMUnitTextField.NSTextField.NSControl
  13 Kind: object  rc:   0  Address: 0x014e8520  Class: NSTextFieldCell  ivar: 
NSActionCell
  14 Kind: object  rc:   0  Address: 0x0182f5d0  Offset: 0x0000004c  Class: 
NSKVONotifying_CCMFormatCtl
  15 Kind: object  rc:   0  Address: 0x01827500  Offset: 0x00000000  Class: 
NSKVONotifying_CCMDoc


Looking at the short example, can you tell me what it is saying? My guess is 
that the output says, "Deep in the window's view hierarchy there is a cell that 
is bound to CCMFormatCtl which in turn is bound to your CCMDoc instance."

So I comment out the line that creates the CCMFormatCtl instance, run the app 
again, close the window, and I get this:

(gdb) info gcc-roots 0x1817360
Number of roots:0

But the document still does not get collected. Its -finalize method does not 
fire.

All words of wisdom are appreciated. I try to use a tech support incident on 
this, but it came back with a request to file a bug report instead.

Ross
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to