首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Cocoa应用程序中的信息gc根

理解Cocoa应用程序中的信息gc根
EN

Stack Overflow用户
提问于 2011-08-01 15:19:31
回答 1查看 142关注 0票数 0

我正在尝试调试Lion中的GC问题。我的NSDocument、NSWindowController和NSWindow子类是在10.6中正确收集的,而不是10.7。

我已经检查了“信息gc-根”的输出,但我不明白它到底在告诉我什么。我没有找到解释输出的文档。如果我忽略了它,我希望有人会指出它。

下面是窗口的输出:

代码语言:javascript
复制
(gdb) info gc-roots 0x181b3f0
Number of roots: 1
Root:
   0 Kind: bytes   rc:   1  Address: 0x019666c0  Offset: 0x00000014
   1 Kind: object  rc:   0  Address: 0x0181b3f0  Class: CCMDocumentWindow

(gdb) po 0x019666c0
<__NSAutoBlock__: 0x19666c0>

窗口控制器:

代码语言:javascript
复制
(gdb) info gc-roots 0x14f3680
Number of roots: 1
Root:
   0 Kind: bytes   rc:   1  Address: 0x019666c0  Offset: 0x00000014
   1 Kind: object  rc:   0  Address: 0x0181b3f0  Class: CCMDocumentWindow  ivar: NSWindow.NSResponder
   2 Kind: object  rc:   0  Address: 0x014f3680  Class: CCMWindowCtl

和文件:

代码语言:javascript
复制
(gdb) info gc-roots 0x181e690
Number of roots: 0

我的问题是:

  1. 文档的输出特别令我费解。如果没有根,它不应该被收集吗?
  2. 在标有0的行中有什么有用的信息吗?
  3. ,我从这里开始找出为什么GC在10.7上失败了?(我向苹果提交了一个支持事件,但他们拒绝了,并告诉我要提交一个bug。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-02 14:29:40

如果保留计数>0,则不会收集

  1. 。GC是OS上的一个混合系统;CFRetain()/CFRelease()仍然很难保留/发布,有效地告诉收集器不要收集东西。因此,这是传统保留/发布上下文中的一个漏洞。
  2. 是--这告诉您在0x019666c0处有一个分配,它是一个非类型化结构(即调试器不知道它是什么),而对根链中下一个项的引用位于偏移量0x00000014。保留此根目录;RC: 1.
  3. 文件错误并附加二进制文件。您可以通过打开malloc日志并在调试器中执行info malloc 0x019666c0来进一步调试。这将为您提供该地址上的分配历史记录,并应指示谁分配了未释放该结构的结构(或未能调用CFRelease())。或者,您也可以对根链中的任何项执行同样的操作。

(是的,这一切都是在window的上下文中进行的。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6900619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档