私はEricaSadunのTheiPhone Developer'sCookbookからiPhoneプログラミングを学んでいます。シミュレーターで81ページから始まる温度変換の例の手順に従って作成したアプリを実行すると、キャッチされない例外が原因でアプリが終了します。 (iPhoneSDK Googleグループに投稿した質問については、 http://groups.google.com/group/iphonesdk/browse_frm/thread/6f44a90fdb8da28a?hl=en を参照してください。)
Main()からUIApplicationMain()を呼び出した後、例外がスローされます。デバッガーでスタックトレースを調べると、(もちろん)アセンブリだけが表示されます。スローされた例外の種類を確認するにはどうすればよいですか?
更新:
デバッガコンソールから例外の詳細を学ぶことで、問題を解決するのに十分でした。 ( http://groups.google.com/group/iphonesdk/browse_frm/thread/6f44a90fdb8da28a?hl=en を参照してください。)objc_exception_throw
にシンボリックブレークポイントを設定できることを確認しました。しかし、そこからのバックトレースが役に立ったかどうかはわかりませんでした。
objc_exception_throw
にブレークポイントを設定し、実行ではなくデバッグを介してアプリを実行します
明確にするために、ブレークポイントなしで例外を取得したときに実際に表示されるのは、常に同じスタックトレースです。これは、キャッチされない例外ハンドラーです。例外のタイプは実行コンソールに記録されますが、例外が発生した場所のバックトレースを確認する場合は、それがブレークポイントの目的です。
新しいXcode(少なくともv4.5以降)では、次のようにすることですべての例外を簡単にキャッチできます。
上記はobjc_exception_throw
のブレークポイントと同じだと思います。 http://samwize.com/2012/09/26/xcode-4-dot-5-tips-and-tricks/
http://ijoshsmith.com/2011/11/28/debugging-exceptions-in-xcode-4-2/
Samewizeのソリューションと同じですが、すべてのプロジェクトでこのブレークポイントをデフォルトで表示する方法も示しています(ブレークポイントを右クリックし、[ブレークポイントを移動]、[ユーザー])。
Kevinが答えたように、objc_exception_throw
にブレークポイントを設定すると、より役立つデバッグ情報が見つかります。
Xcode 4.2を使用している場合は、BreakpointNavigatorに移動してこのシンボリックブレークポイントを追加できます>左下の追加アイコンをクリック>シンボリックブレークポイントを追加> Symbol> Doneにobjc_exception_throw
と入力します。