Xcode异常断点不打印抛出的异常的详细信息

zsbz8rwp  于 2023-03-24  发布在  其他
关注(0)|答案(6)|浏览(189)

摘要

当我设置一个异常断点时,我没有得到异常消息。我如何得到异常消息?我已经知道如何得到堆栈跟踪,但那不包括异常消息。

详细信息

在过去,我用Xcode开发iOS应用程序,当出现问题时,我会得到一个错误/异常。异常通常会有一条消息,比如“不能取消引用null”或其他什么。
在过去的几个星期里,我一直在使用Xcode 4.6.x,从来没有收到过异常消息。我经常会收到SIGABRT。我在异常断点上放了break,它会在那里中断,但它在iOS SDK中的某个程序集中关闭了,我从来没有收到过消息。
事实上,我不记得上次看到调试器控制台中显示任何东西是什么时候了。
迁移到LLVM后,异常信息是否消失?
我的应用程序在SDK中崩溃而不知道原因是非常令人沮丧的。我检查最后一个函数以确保设置正确(对象分配等),这意味着我没有任何线索。
有没有可能是过去遗留下来的构建设置以某种方式关闭了异常消息?

请重新打开问题,现在有答案了!

在评论中给出了一个很好的答案。这应该被提升为完整的答案,这样我就可以标记已回答的问题,其他有这个共同问题的人可以找到它。为了实现这一点,这个问题需要重新打开!(我会在发生这种情况后删除此请求。)

3bygqnnd

3bygqnnd1#

我将在这里更新杰夫的答案:
要突出显示导致异常的(而不是main.m中的UIApplicationMain())并查看异常的原因(例如,“error:fetch请求必须具有实体。”),请执行以下操作:
1.在断点导航器中:
1.添加(+),添加异常断点
1.选择新断点,按住Ctrl键单击,编辑断点
1.添加操作
1.输入:po $arg1
堆栈跟踪的相关部分将位于nagivator区域。
这似乎在Xcode 9中仍然有效
下面是我为Xcode 6及以下版本添加的内容。
1.输入:po(NSException)$eax*
在Xcode 6中,你必须显式地提供对象类型,因为它不再被推断。

gpnt7bae

gpnt7bae2#

对于Xcode 7-9(基于Jeff的回答):
在断点导航器中:
1.添加(+),添加异常断点
1.选择新断点,按住Ctrl键单击,编辑断点
1.添加操作
1.输入:po $arg1

dluptydi

dluptydi3#

要突出显示导致异常的(而不是main.m中的UIApplicationMain())并查看异常的原因(例如,“error:fetch请求必须具有实体。”),请执行以下操作:
1.在断点导航器中:
1.添加(+),添加异常断点
1.选择新断点,按住Ctrl键并单击,编辑断点
1.添加操作
1.输入:po $eax
堆栈跟踪的相关部分将位于nagivator区域。

gg58donl

gg58donl4#

是的,xcode对于调试不是那么友好。我喜欢这篇文章,它帮助我更清楚地理解崩溃日志))Demystifying iOS Application Crash Logs
如果您看到错误“消息发送到释放的示例”,也请执行此操作
'产品-〉编辑方案-〉启用僵尸对象'
这将启用僵尸对象,当你对你的项目进行配置文件时选择“僵尸”,导致错误,你将能够看到哪些对象被释放,例如NSArray *myArray

cgh8pdjw

cgh8pdjw5#

po $eaxpo (NSException *)$eax得到的信息似乎与Xcode在没有设置异常断点的情况下打印的信息不同。
1.添加异常断点
1.发生异常,断点被命中-〉我知道位置
1.临时禁用断点(Debug区域左侧的第二个按钮)
1.继续执行程序(Debug区域左侧的第三个按钮)
1.详细信息已打印-〉我知道原因
显然不是很优雅和灵活,但至少我两个大问题得到了回答(在哪里和为什么)。

sqxo8psd

sqxo8psd6#

LLDB线程回溯

Low Level Virtual Machine(LLVM)(https://stackoverflow.com/a/66844588/4770877)
可以使用btthread backtrace命令打印错误跟踪
显示当前线程的堆栈回溯。
在崩溃报告中可以找到相同的堆栈跟踪

当前线程使用信息currentThread

//Objective-C
po [NSThread currentThread]

//Swift
po Thread.currentThread
  • po不工作时,有时可以使用fr v(或者XCode 10.2中的v

相关问题