9

我暂停了我的应用程序并尝试在控制台上打印一些东西。(例如po foo())。这样做后,我收到以下消息:

错误:执行被中断,原因:断点2.1。
进程已恢复到执行前的状态。

但是,该函数中没有断点。为什么它向我显示此错误而不执行该功能?

这是在 Xcode 4.6 上。

4

1 回答 1

9

事实证明,有问题的断点 (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的提示。

于 2013-08-01T07:02:52.223 回答