我正在从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
上设置一个符号断点,但我不想查看那里的回溯是否有用。
答案 0 :(得分:52)
在objc_exception_throw
放置断点并通过Debug而不是Run
澄清一下,当你得到没有断点的异常时,你实际看到的是始终是相同的堆栈跟踪 - 它是未捕获的异常处理程序。异常类型会记录到运行控制台,但是如果要查看引发异常的位置的回溯,那就是断点的用途。
答案 1 :(得分:14)
在新的Xcode中(至少从v4.5开始),您可以通过以下方式轻松捕获所有异常:
我认为以上内容与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
完成。