时间:2010-07-25 03:06:28

标签: objective-c iphone xcode debugging lldb

4 个答案:

答案 0 :(得分:156)

答案 1 :(得分:10)

在新的模拟器上(iOS 8,64bit)xcode 6我在异常框架中使用:objc_exception_throw

po $rax

in 32bit:

po $eax

什么是rax?

Rax是一个64位寄存器,用于替换旧的eax

如何找到所有寄存器?

register read

Source wikipedia

答案 2 :(得分:5)

在撰写本文时,这篇文章是我在Google上的热门话题: lldb打印例外。因此,我将此答案添加到lldb和x86_64帐户中。

我使用po $eax查找异常的尝试失败,error: Couldn't materialize struct: Couldn't read eax (materialize)。来自早期答案的链接文档中描述的其他尝试也失败了。

关键是我必须首先点击主线程中的objc_exception_throw框架。 lldb 不会在该帧中开始。

在我的所有搜索和以下示例中,this blog entry是第一个以对我有用的方式解释事物的人。它更现代,于2012年8月发布。

答案 3 :(得分:0)

如果你有一个catch语句,在那里放一个断点,你可以在那时检查异常对象。

如果您没有catch语句,请继续。

您的终端会收到如下信息:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' * - [__ NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从对象插入nil对象[0]'

然而,您可能正在寻找一种方法来检查它而不会继续,因为在应用程序终止时您将丢失好的堆栈跟踪。

为此,听起来Fnord的答案是最好的,但我无法让它在LLDB中运作。