web-dev-qa-db-ja.com

Xcodeデバッガー(iPhone用)でスローされた例外を確認するにはどうすればよいですか?

私は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にシンボリックブレークポイントを設定できることを確認しました。しかし、そこからのバックトレースが役に立ったかどうかはわかりませんでした。

29
Daryl Spitzer

objc_exception_throwにブレークポイントを設定し、実行ではなくデバッグを介してアプリを実行します

明確にするために、ブレークポイントなしで例外を取得したときに実際に表示されるのは、常に同じスタックトレースです。これは、キャッチされない例外ハンドラーです。例外のタイプは実行コンソールに記録されますが、例外が発生した場所のバックトレースを確認する場合は、それがブレークポイントの目的です。

52
Lily Ballard

新しいXcode(少なくともv4.5以降)では、次のようにすることですべての例外を簡単にキャッチできます。

  1. ブレークポイントナビゲーターを表示する(⌘6)
  2. 左下の[+]をクリックします
  3. 例外ブレークポイントを追加

上記はobjc_exception_throwのブレークポイントと同じだと思います。 http://samwize.com/2012/09/26/xcode-4-dot-5-tips-and-tricks/

14
samwize

http://ijoshsmith.com/2011/11/28/debugging-exceptions-in-xcode-4-2/

Samewizeのソリューションと同じですが、すべてのプロジェクトでこのブレークポイントをデフォルトで表示する方法も示しています(ブレークポイントを右クリックし、[ブレークポイントを移動]、[ユーザー])。

6
Dale

Kevinが答えたように、objc_exception_throwにブレークポイントを設定すると、より役立つデバッグ情報が見つかります。

Xcode 4.2を使用している場合は、BreakpointNavigatorに移動してこのシンボリックブレークポイントを追加できます>左下の追加アイコンをクリック>シンボリックブレークポイントを追加> Symbol> Doneにobjc_exception_throwと入力します。

3
samwize