首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何破解__NSAutoreleaseNoPool

如何破解__NSAutoreleaseNoPool
EN

Stack Overflow用户
提问于 2010-05-15 21:22:17
回答 5查看 7.2K关注 0票数 10

我正忙着

* __NSAutoreleaseNoPool():NSEvent类的对象0x1961180在没有池的情况下释放-只是泄漏

在运行时发出警告,不知道原因是什么。粗略的Google指出,这是一个我可以用Xcode破解的符号,但是通过Run>Manage Breakpoints>Add符号断点添加它作为一个符号断点,或者简单地通过断点管理窗口添加它,就会产生一个断点,它旁边有一个a,而不是检查,这意味着它是一个找不到的符号。

我试着用两个下划线添加符号"__NSAutoreleaseNoPool“,一个下划线,现在我只是觉得很蠢。错误继续被记录,没有断点被击中。任何关于中断Obj符号或调试这一点的指针都将不胜感激。

编辑:在可能10次(10次,所以总共几十次,包括至少两次Xcode重新启动)运行后,我得到了控制台上打印的“未决断点9-”"__NSAutoreleaseNoPool“解析”,并且断点开始工作。是否有任何方法强制挂起的断点实际解决?

EN

回答 5

Stack Overflow用户

发布于 2011-03-29 01:24:47

要真正回答你的问题,请看NSDebug.h。在这里,你会发现一个评论,这是其中的一部分:

代码语言:javascript
复制
NAME OF ENV. VARIABLE                  DEFAULT  SET TO...
NSDebugEnabled                            NO    "YES"
NSZombieEnabled                           NO    "YES"
NSDeallocateZombies                       NO    "YES"
NSHangOnUncaughtException                 NO    "YES"

下面是这些评论:

代码语言:javascript
复制
// Functions used as interesting breakpoints in a debugger
// void __NSAutoreleaseNoPool(void *object);
        // Called to log the "Object X of class Y autoreleased with no
        // pool in place - just leaking" message.  If an environment
        // variable named "NSAutoreleaseHaltOnNoPool" is set with string
        // value "YES", the function will automatically break in the
        // debugger (or terminate the process).

// void __NSAutoreleaseFreedObject(void *freedObject);
        // Called when a previously freed object would be released
        // by an autorelease pool.  If an environment variable named
        // "NSAutoreleaseHaltOnFreedObject" is set with string value
        // "YES", the function will automatically break in the debugger
        // (or terminate the process).

因此,您实际上不需要设置这些断点;只需设置适当的环境变量即可。你可以从你的.bashrc或者在Xcode 4中做后者,你可以编辑你的“方案”的“运行”部分,并将它们设置在那里--这就是我所做的,而且它工作得很好。

票数 25
EN

Stack Overflow用户

发布于 2011-03-21 07:03:45

关于在__NSAutoreleaseNoPool()上设置断点,我也有同样的问题。我终于成功地设置了断点,使用gdb命令。调试器启动后,在调试器控制台中按ctrl+C。使用"br __NSAutoreleaseNoPool“设置断点并重新启动调试器。

票数 5
EN

Stack Overflow用户

发布于 2010-05-17 13:22:01

听起来好像在某个线程中使用Cocoa,而不是用自动释放池包装线程体。您可能不需要使用断点来找到这个。你在做detachNewThreadSelector吗?

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

https://stackoverflow.com/questions/2841808

复制
相关文章

相似问题

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