问题描述
警告,不知道原因是什么。 Cursory Googles表示这是Xcode可以打破的符号,但是通过运行>管理断点>添加符号断点将其添加为符号断点,或者简单地通过断点管理窗口,导致断点与旁边的断点而不是一个支票,我认为这是一个无法找到的符号。
我尝试添加符号__NSAutoreleaseNoPool两个下划线,一个下划线,现在我只是感到愚蠢。这些错误继续被记录下来,没有断点被击中。任何用于打破Obj-C符号或调试的指针都将不胜感激。
要真正回答你的问题,看看 / p>
I'm getting peppered with
warnings during run-time and have no idea what the cause is. Cursory Googles indicate that this is a symbol I can break on with Xcode, but adding it as a symbolic breakpoint via Run>Manage Breakpoints>Add Symbolic Breakpoint, or simply via the breakpoints management window, results in a breakpoint with a - next to it instead of a check, which I take to mean it's a symbol that can't be found.
I've tried adding the symbol "__NSAutoreleaseNoPool" with two underscores, one underscore, and now I'm just feeling stupid. The errors continue to get logged and no breakpoints get hit. Any pointers for breaking on Obj-C symbols or debugging this would be appreciated.
[EDIT: after maybe 10 (10 more, so a couple dozen total, including at least two Xcode restarts) runs I got "Pending breakpoint 9 - "__NSAutoreleaseNoPool" resolved" printed to my console and the breakpoint started working. Is there any way to force a pending breakpoint to actually resolve?]
To actually answer your question, look in NSDebug.h. There you will find a comment of which this is part:
NAME OF ENV. VARIABLE DEFAULT SET TO... NSDebugEnabled NO "YES" NSZombieEnabled NO "YES" NSDeallocateZombies NO "YES" NSHangOnUncaughtException NO "YES"
and farther down are these comments:
// 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).
So you don't really need to set these breakpoints; just set the appropriate environment variables. You can do the latter either from your e.g. .bashrc or in Xcode 4 you can edit the "Run" section of your "scheme" and set them there -- that's what I do, and it works just fine.
这篇关于如何打破__NSAutoreleaseNoPool的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!