30

我正在从 Erica Sadun 的 The iPhone Developer's Cookbook 学习 iPhone 编程。当我在模拟器中按照从第 81 页开始的温度转换示例中的步骤运行我创建的应用程序时,它由于未捕获的异常而终止。(有关我发布到 iPhoneSDK Google Group 的问题,请参阅http://groups.google.com/group/iphonesdk/browse_frm/thread/6f44a90fdb8da28a?hl=en。)

从我的 main() 调用 UIApplicationMain() 后抛出异常。如果我查看调试器中的堆栈跟踪,我看到的只是(当然)汇编。我如何找出引发了什么样的异常?

更新
从调试器控制台了解异常的详细信息足以帮助我解决问题。(请参阅http://groups.google.com/group/iphonesdk/browse_frm/thread/6f44a90fdb8da28a?hl=en。)我确认我可以在 上设置一个符号断点objc_exception_throw,但我没有查看回溯是否来自会有帮助的。

4

4 回答 4

53

设置断点objc_exception_throw并通过 Debug 而不是 Run 运行您的应用程序

澄清一下,当你得到一个没有断点的异常时,你实际看到的总是相同的堆栈跟踪——它是未捕获的异常处理程序。异常的类型记录到运行控制台,但如果您想查看引发异常的位置的回溯,这就是断点的用途。

于 2008-12-21T18:51:15.327 回答
15

在新的 Xcode(至少从 v4.5 开始)中,您可以通过执行以下操作轻松捕获所有异常:

  1. 调出断点导航器(⌘6)
  2. 点击左下角的+
  3. 添加异常断点

我认为以上内容与objc_exception_throw. http://samwize.com/2012/09/26/xcode-4-dot-5-tips-and-tricks/

于 2012-09-29T08:44:39.967 回答
6

http://ijoshsmith.com/2011/11/28/debugging-exceptions-in-xcode-4-2/

与samewize 的解决方案相同,但也展示了如何在所有项目中默认显示此断点(右键单击断点,将断点移动到,用户)。

于 2013-02-14T14:45:06.307 回答
3

正如 Kevin 所回答的,通过在objc_exception_throw.

如果您使用的是 Xcode 4.2,您可以通过转到 Breakpoint Navigator > 单击左下角的添加图标 > 添加符号断点 > 输入objc_exception_throw符号 > 完成来添加此符号断点。

于 2012-02-04T06:45:22.880 回答