我正忙着
* __NSAutoreleaseNoPool():NSEvent类的对象0x1961180在没有池的情况下释放-只是泄漏
在运行时发出警告,不知道原因是什么。粗略的Google指出,这是一个我可以用Xcode破解的符号,但是通过Run>Manage Breakpoints>Add符号断点添加它作为一个符号断点,或者简单地通过断点管理窗口添加它,就会产生一个断点,它旁边有一个a,而不是检查,这意味着它是一个找不到的符号。
我试着用两个下划线添加符号"__NSAutoreleaseNoPool“,一个下划线,现在我只是觉得很蠢。错误继续被记录,没有断点被击中。任何关于中断Obj符号或调试这一点的指针都将不胜感激。
编辑:在可能10次(10次,所以总共几十次,包括至少两次Xcode重新启动)运行后,我得到了控制台上打印的“未决断点9-”"__NSAutoreleaseNoPool“解析”,并且断点开始工作。是否有任何方法强制挂起的断点实际解决?
发布于 2011-03-29 01:24:47
要真正回答你的问题,请看NSDebug.h。在这里,你会发现一个评论,这是其中的一部分:
NAME OF ENV. VARIABLE DEFAULT SET TO...
NSDebugEnabled NO "YES"
NSZombieEnabled NO "YES"
NSDeallocateZombies NO "YES"
NSHangOnUncaughtException NO "YES"下面是这些评论:
// 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中做后者,你可以编辑你的“方案”的“运行”部分,并将它们设置在那里--这就是我所做的,而且它工作得很好。
发布于 2011-03-21 07:03:45
关于在__NSAutoreleaseNoPool()上设置断点,我也有同样的问题。我终于成功地设置了断点,使用gdb命令。调试器启动后,在调试器控制台中按ctrl+C。使用"br __NSAutoreleaseNoPool“设置断点并重新启动调试器。
发布于 2010-05-17 13:22:01
听起来好像在某个线程中使用Cocoa,而不是用自动释放池包装线程体。您可能不需要使用断点来找到这个。你在做detachNewThreadSelector吗?
https://stackoverflow.com/questions/2841808
复制相似问题