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 に答える