nir*_*ana 59 xcode objective-c ios
当我设置异常断点时,我没有收到异常消息.我如何获得异常消息?我已经知道如何获得堆栈跟踪,但这不包括异常消息.
在过去,我使用Xcode开发了iOS应用程序,当出现问题时,我会收到错误/异常.该异常通常会有一个消息,如"无法取消引用null"或其他任何内容.
现在,在过去几周内使用Xcode 4.6.x,我从未收到过异常消息.我经常会得到一个SIGABRT.我在异常断点处放置了它,它会在那里中断,但它在iOS SDK中的某个程序集中关闭,我从来没有收到消息.
事实上,我不记得上次看到调试器控制台中出现的任何内容.
迁移到LLVM时异常信息是否消失了?
让我的应用程序在SDK中崩溃而不知道原因是非常令人沮丧的.我检查最后一个函数,以确保正确设置(分配对象等),这意味着我没有任何线索.
是否可能从过去保留的构建设置以某种方式关闭异常消息?
在评论中给出了一个很好的答案.这应该被提升为完整答案,因此我可以将问题标记为已回答,而其他有此问题的人可以找到它.为了实现这一点,需要重新打开这个问题!(在那之后我会删除这个请求.)
uca*_*tit 63
我会在这里更新杰夫的答案:
要使导致异常的行突出显示(而不是main.m中的UIApplicationMain())并查看异常的原因(例如,"错误:获取请求必须具有实体."),请执行以下操作:
- 在Breakpoint导航器中:
- 添加(+),添加异常断点
- 选择新断点,按住Control键,编辑断点
- 添加动作
- 输入:po $ arg1
堆栈跟踪的相关部分将位于nagivator区域中.
这似乎仍然适用于Xcode 9
这是我在Xcode 6及以下版本中使用的补充.
在Xcode 6中,您必须显式提供对象类型,因为不再推断它.
jca*_*ady 50
对于Xcode 7-9(根据杰夫的回答):
在Breakpoint导航器中:
po $arg1
Jef*_*eff 13
要使导致异常的行突出显示(而不是main.m中的UIApplicationMain())并查看异常的原因(例如,"错误:获取请求必须具有实体."),请执行以下操作:
堆栈跟踪的相关部分将位于nagivator区域中.
是的,xcode不太适合调试。我喜欢这篇文章,可以帮助我更清楚地了解崩溃日志)) 揭开iOS应用崩溃日志的神秘面纱
如果看到错误“消息发送到已释放实例”,也请执行此操作
'产品->编辑方案->启用僵尸对象'
这将启用僵尸对象,当您对项目进行概要分析时,选择“僵尸”,导致错误,您将能够看到分配了哪些对象,例如NSArray * myArray
如果未设置异常断点,则我从Xcode所获得的信息po $eax
或po (NSException *)$eax
似乎与Xcode所打印的信息不同。因此,我执行以下操作
显然不是很优雅和灵活,但是至少我回答了两个大问题(在哪里和为什么)。
LLDB 线程回溯
您可以使用bt
或thread backtrace
命令来打印错误跟踪
显示当前线程的堆栈回溯。
您可以在崩溃报告中找到相同的堆栈跟踪
有关当前线程使用情况的信息currentThread
//Objective-C
po [NSThread currentThread]
//Swift
po Thread.currentThread
Run Code Online (Sandbox Code Playgroud)
*有时您可以在不工作时使用fr v
(或仅从v
XCode 10.2)po
归档时间: |
|
查看次数: |
21971 次 |
最近记录: |