Ios Xcode异常断点不存在';t打印正在引发的异常的详细信息 总结
设置异常断点时,不会收到异常消息。如何获取异常消息?我已经知道如何获取堆栈跟踪,但其中不包括异常消息 细节 在过去,我用Xcode开发iOS应用程序,当出现问题时,我会得到一个错误/异常。异常通常会有一条消息,如“can not dereference null”或其他什么 现在,在过去的几周里,我一直使用Xcode 4.6.x,从未收到过异常消息。我经常会得到一个小布条。我输入了break-on-exception断点,它将在那里中断,但它在iOS SDK的某些程序集中关闭,我从未收到消息 事实上,我不记得上次在调试器控制台中看到任何东西是什么时候了 迁移到LLVM时是否显示异常信息 让我的应用程序在SDK中崩溃而不知道原因是非常令人沮丧的。我检查最后一个函数,以确保事情设置正确(分配的对象等),这意味着我没有任何线索 是否可能是因为以前的构建设置以某种方式关闭了异常消息 请重新开始提问。它现在有了答案!Ios Xcode异常断点不存在';t打印正在引发的异常的详细信息 总结,ios,objective-c,xcode,Ios,Objective C,Xcode,设置异常断点时,不会收到异常消息。如何获取异常消息?我已经知道如何获取堆栈跟踪,但其中不包括异常消息 细节 在过去,我用Xcode开发iOS应用程序,当出现问题时,我会得到一个错误/异常。异常通常会有一条消息,如“can not dereference null”或其他什么 现在,在过去的几周里,我一直使用Xcode 4.6.x,从未收到过异常消息。我经常会得到一个小布条。我输入了break-on-exception断点,它将在那里中断,但它在iOS SDK的某些程序集中关闭,我从未收到消息 事
评论中给出了一个极好的答案。这应该被提升为完整答案,这样我就可以标记所回答的问题,其他有这个共同问题的人也可以找到它。为了实现这一点,这个问题需要重新讨论!(发生这种情况后,我将删除此请求。)是的,xcode对于调试来说并不友好。我喜欢这篇文章,它可以帮助我更清楚地理解崩溃日志。) 如果看到错误“消息已发送到解除分配的实例”,也要执行此操作 '产品->编辑方案->启用僵尸对象' 这将启用僵尸对象,并在对项目进行配置时选择
“zombie”,引起错误,您将能够看到释放了哪些对象,例如NSArray*myArray使引起异常的行高亮显示(而不是main.m中的UIApplicationMain()),并看到异常的原因(例如,“错误:获取请求必须有一个实体”),执行以下操作:
- 在断点导航器中:
- 添加(+),添加异常断点
- 选择新断点,控制单击,编辑断点
- 添加操作
- 输入:po$eax
堆栈跟踪的相关部分将位于nagivator区域。我将在此处更新Jeff的答案:
要突出显示导致异常的行(而不是main.m中的UIApplicationMain()),并查看异常的原因(例如,“错误:提取请求必须有一个实体”),请执行以下操作:
- 在断点导航器中:
- 添加(+),添加异常断点
- 选择新断点,控制单击,编辑断点
- 添加操作
- 输入:po$arg1
在Xcode 6中,您必须显式提供对象类型,因为它不再被推断。我从
po$eax
或po(NSException*)$eax获得的信息似乎与Xcode在未设置异常断点的情况下打印的信息不同。所以我做了以下几件事
添加异常断点
发生异常,断点被命中->我知道位置
暂时禁用断点(调试区域左侧的第二个按钮)
继续程序执行(调试区域左侧的第三个按钮)
详情已打印->我知道原因
显然不是很优雅和灵活,但至少我回答了两个大问题(在哪里以及为什么)。对于Xcode 7-9(基于Jeff的回答):
在断点导航器中:
添加(+),添加异常断点
选择新断点,控制单击,编辑断点
添加操作
输入:po$arg1
您可以使用bt
或threadbacktrace
命令打印错误跟踪
显示当前线程的堆栈回溯跟踪
在崩溃报告中可以找到相同的堆栈跟踪
有关当前线程使用的信息currentThread
//Objective-C
po [NSThread currentThread]
//Swift
po Thread.currentThread
*有时,当po
不工作时,您可以使用fr v
(或仅使用XCode 10.2中的v
)在该断点中是否有bt
作为操作?右键单击->编辑断点->操作->下拉菜单中的“调试器命令”,文本字段中的bt
。这应该在控制台中打印回溯。如果设置了异常断点,则只需创建回溯,然后在将异常打印到控制台之前命中该断点。我解释了如何设置断点来打印异常。你看过吗?因为我一直被同样的问题困扰着,在2013年WWDC上,我请了一些lldb团队成员来帮助我解决这个问题。我在那个链接中解释了如何解决这个问题。如果问题被重新打开,我会的。有趣的是,下面的“启用僵尸对象”选项之一是“日志异常”,这之前没有检查过。我已经检查过了,看看这是否解决了问题。我在不止一个地方看到了这条建议。。。但是它不再在Xcode 6中工作。或者,您也可以转到控制台窗口,在调试控制台中输入po(NSException*)$eax。重要提示:如果您正在创建64位应用程序,则使用$rax代替$eax<代码>采购订单(NSException*)$rax
在Xcode 6.3中,我得到的结果错误:使用了未声明的标识符“$eax”-相同的f