我暂停了我的应用并尝试将某些内容打印到控制台。 (例如po foo()
)。完成后,我收到以下消息:
错误:执行被中断,原因:断点2.1。
该过程已在执行前返回到该状态。
但是,该功能中没有断点。为什么它会向我显示此错误而不执行该功能?
这是在Xcode 4.6上。
答案 0 :(得分:7)
事实证明,有问题的断点(2.1)是All Exceptions断点。我调用的方法引发了一个异常,导致All Exceptions断点被触发。一旦达到断点,po
将停止执行(有关详细信息,请参阅this answer)。
如果禁用All Exceptions断点并再次运行它,则更明显存在异常:
error: Execution was interrupted, reason: signal SIGSTOP.
The process has been returned to the state before execution.
如果你总是启用All Exceptions断点,那么消息可能是不明确的:它是否到达断点,因为在执行路径的某处确实存在断点,或者是否引发了异常?
另一种解决方案(不要求禁用所有异常断点)是使用expr
而不是po
(有关以下标志的说明,请参阅上面的链接)。< / p>
运行expr -u 0 -o -- foo()
会产生以下输出:
error: Execution was interrupted, reason: breakpoint 2.1 -2.1.
The process has been left at the point where it was interrupted.
* thread #1: tid = [...] libobjc.A.dylib`objc_exception_throw, stop reason = breakpoint 2.1 -2.1
frame #0: [...] libobjc.A.dylib`objc_exception_throw
objc_exception_throw
字符串是exception was raised。