1

在调试其他东西时遇到这种现象并且很好奇:

(lldb) po (NSException *)($eax)
$3 = 0x0d16c510 Test exception message
(lldb) expr NSException *$exception = (NSException *)($eax)
(lldb) po $exception
$exception = 0x00000000 <nil>

我在 6.1 模拟器中运行 iOS 应用程序。为什么在直接引用 $eax 给我一个对象时分配一个便利变量会给我 nil?

4

1 回答 1

0

我试图用 Xcode 4.6.2 重现这个但不能。我创建了一个模板 iOS 应用程序并在模拟器中启动它。我没有费心去一个我在寄存器中有异常的地方——但寄存器值在这里很重要。

(lldb) reg read eax
     eax = 0x10004005
(lldb) p (NSException*) ($eax)
(NSException *) $0 = 0x10004005 <not an Objective-C object>
(lldb) expr NSException*$exception = (NSException *)($eax)
(lldb) p $exception
(NSException *) $exception = 0x10004005 <not an Objective-C object>
(lldb) 

在您的示例$exception中,值为 0x0,但是当我使用 4.6.2 尝试此操作时,它看起来正在工作。你用的是什么版本的 Xcode?

于 2013-06-07T08:47:19.300 回答