我暂停了我的应用程序并尝试在控制台上打印一些东西。(例如po foo()
)。这样做后,我收到以下消息:
错误:执行被中断,原因:断点2.1。
进程已恢复到执行前的状态。
但是,该函数中没有断点。为什么它向我显示此错误而不执行该功能?
这是在 Xcode 4.6 上。
事实证明,有问题的断点 (2.1) 是 All Exceptions 断点。我调用的方法引发了一个异常,这导致 All Exceptions 断点被命中。po
到达断点后将停止执行(有关更多信息,请参阅此答案)。
如果禁用 All Exceptions 断点并再次运行它,则更清楚的是存在异常:
error: Execution was interrupted, reason: signal SIGSTOP.
The process has been returned to the state before execution.
如果始终启用 All Exceptions 断点,则消息可能会模棱两可:它到达断点是因为在执行路径的某处确实存在断点,还是引发了异常?
另一种解决方案(不需要禁用所有异常断点)是使用expr
代替po
(有关以下标志的描述,请参见上面的链接)。
运行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
的提示。