3

次のコードを使用して nil オブジェクトを NSDictionary に配置しようとすると、例外が発生しました。

NSString * object = [self someMethod]; // the method return nil
NSDictionary * dict = @{ @"key": object };

これは私が知っている単純なエラーです。例として使用します。シミュレーターでアプリがクラッシュし、コンソールに表示されるエラー メッセージは次のとおりです。

 2012-11-13 14:40:00.528 Ape[44456:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'

 *** First throw call stack:
 (0x208b012 0x1a68e7e 0x2051a95 0x207e4e9 0x93f72 0x939b4 0x8800f 0x85f4d 0x852a3 0x1ce853f 0x1cfa014 0x1ce9fd6 0x1cfa014 0x1cf18b7 0x1ced405 0x1cea768 0x2031af5 0x2030#
 libc++abi.dylib: terminate called throwing an exception

私の質問は、コンソールでメッセージを把握し、どのcall stackコード行が問題を引き起こしているかを調べる方法ですか?

ありがとうございます。

4

4 に答える 4

4

例外ブレークポイントを追加する必要があります。Xcode -> Navigator -> Breakpoints (ショートカット Cmd+6) を開きます。左下隅に + 記号があり、それをクリックして [例外ブレークポイントを追加...] を選択し、[完了] を選択します。

于 2012-11-13T07:33:41.743 に答える
0

通常、例外が発生する場所を特定するためのシンボリックstracktraceが与えられます。backtrace他の代替手段は、独自の例外処理を設定し、and friends(マンページ)を使用してシンボリックスタックトレースを提供することです。本番コードでクラッシュが発生する場所を特定する場合、シンボルは一般的に削除されます。atosユーティリティ(マンページ)があります。

于 2012-11-13T07:44:05.333 に答える
0

コンソールで、バックトレースに「bt」と入力すると、最後の呼び出しが表示されます。ただし、特定のエラーの場合は表示されないため、グレイバーが述べたように例外ブレークポイントを追加します

于 2012-11-13T07:48:00.293 に答える
0

xcode「デバッグ領域を非表示または表示」をオンにします

次に、そのメニューから「コンソールのみを表示」ボタンを選択します

エラーが表示されたら、シンボル(lldb)を見つけて、その横にbt と入力します。

于 2012-11-13T08:36:43.653 に答える