当我设置异常断点时,我没有收到异常消息。我如何获得异常消息?我已经知道如何获得堆栈跟踪,但这不包括异常消息。
过去我使用Xcode开发了iOS应用程序,当出现问题时,我会收到错误/异常。例外通常会有一条消息,例如“无法取消引用null”等等。
现在,在过去几周内使用Xcode 4.6.x,我从未收到过异常消息。我经常会得到一个SIGABRT。我在异常断点处放置了它,它会在那里中断,但它在iOS SDK中的一些程序集中关闭,我从来没有收到消息。
事实上,我不记得上次看到调试器控制台中出现的任何内容。
迁移到LLVM时,异常信息是否消失?
让我的应用程序在SDK中崩溃而不知道原因是非常令人沮丧的。我检查最后一个函数,以确保正确设置(分配对象等),这意味着我没有任何线索。
是否可能以某种方式关闭异常消息,从而保留过去的构建设置?
在评论中给出了一个很好的答案。这应该被提升为完整答案,因此我可以将问题标记为已回答,而其他有此问题的人可以找到它。为了实现这一点,需要重新打开这个问题! (在此之后我会删除这个请求。)
答案 0 :(得分:59)
我将在此更新杰夫的答案:
同时使行突出显示异常(而不是main.m中的UIApplicationMain())并查看原因(例如,&# 34;错误:获取请求必须有一个实体。"),执行此操作:
- 在Breakpoint导航器中:
- 添加(+),添加异常断点
- 选择新断点,按住Control键单击,编辑断点
- 添加操作
- 输入: po $ arg1
堆栈跟踪的相关部分将位于nagivator区域。
这似乎仍适用于Xcode 9
这是我在Xcode 6及以下版本中使用的补充。
在Xcode 6中,您必须显式提供对象类型,因为不再推断它。
答案 1 :(得分:50)
对于Xcode 7-9(根据Jeff的回答):
在Breakpoint导航器中:
po $arg1
答案 2 :(得分:11)
同时使行突出显示异常(而不是main.m中的UIApplicationMain())并查看原因(例如,&# 34;错误:获取请求必须有一个实体。"),执行此操作:
堆栈跟踪的相关部分将位于nagivator区域。
答案 3 :(得分:4)
是的,xcode对调试不太友好。我喜欢这篇文章,这有助于我清楚地了解崩溃日志)) Demystifying iOS Application Crash Logs
如果您看到错误“消息已发送到已解除分配的实例”
,也可执行此操作'产品 - >编辑方案 - >启用Zombie Objects的
这将启用僵尸对象,当您对项目进行配置文件选择时 “zombie”,导致错误,你将能够看到哪些对象被解除分配,例如NSArray * myArray
答案 4 :(得分:4)
我从po $eax
或po (NSException *)$eax
获得的信息似乎与Xcode在未设置异常断点时打印的信息不同。所以我做了以下,
显然不是很优雅和灵活,但至少我回答了两个大问题(在哪里以及为什么)。
答案 5 :(得分:2)