如何找出Xcode调试器(适用于iPhone)中引发的异常?

时间:2008-12-21 18:31:44

标签: iphone xcode debugging exception

我正在从Erica Sadun的iPhone开发者手册中学习iPhone编程。当我按照模拟器中第81页开始的温度转换示例中的步骤运行我创建的应用程序时,它会因未捕获的异常而终止。 (有关我发布到iPhoneSDK Google网上论坛的问题,请参阅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 个答案:

答案 0 :(得分:52)

objc_exception_throw放置断点并通过Debug而不是Run

运行您的应用

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

答案 1 :(得分:14)

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

  1. 打开断点导航器(⌘6)
  2. 点击左下角的+
  3. 添加异常断点
  4. 我认为以上内容与objc_exception_throw上的断点相同。 http://samwize.com/2012/09/26/xcode-4-dot-5-tips-and-tricks/

答案 2 :(得分:6)

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

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

答案 3 :(得分:3)

正如凯文回答的那样,您可以通过在objc_exception_throw设置断点来找到更多有用的调试信息。

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