63

まとめ

例外ブレークポイントを設定すると、例外メッセージが表示されません。例外メッセージを取得するにはどうすればよいですか? スタック トレースを取得する方法は既に知っていますが、例外メッセージは含まれていません。

詳細

以前は Xcode で iOS アプリを開発していましたが、問題が発生するとエラーや例外が発生しました。例外には、「null を逆参照できません」などのメッセージが含まれることがよくあります。

現在、過去数週間 Xcode 4.6.x を使用していますが、例外メッセージを受け取ったことはありません。私はしばしばSIGABRTを取得します。例外ブレークポイントでブレークを設定すると、そこでブレークしますが、iOS SDK 内の一部のアセンブリでオフになり、メッセージが表示されません。

実際、最後にデバッガ コンソールに何かが表示されたのはいつか思い出せません。

LLVM への移行で例外情報は消えましたか?

SDK で理由がわからずにアプリがクラッシュするのは非常にイライラします。最後の関数をチェックして、物事が正しく設定されていること (オブジェクトの割り当てなど) を確認します。

過去から引き継がれたビルド設定が何らかの形で例外メッセージをオフにしている可能性はありますか?

質問を再開してください。これで答えが出ました!

コメントで素晴らしい答えが与えられました。これは完全な回答に昇格する必要があるため、回答済みの質問にマークを付けることができ、この一般的な問題を抱えている他の人がそれを見つけることができます. そのためには、質問を再開する必要があります。(その後、この嘆願は削除します。)

4

6 に答える 6

66

ここでジェフの答えを更新します:

例外の原因となっている行を(main.m の UIApplicationMain() ではなく)強調表示し、例外の理由(たとえば、「エラー: フェッチ要求にはエンティティが必要です。」) を表示するには、次のようにします。

  • ブレークポイント ナビゲーターで:
    1. 追加 (+)、例外ブレークポイントの追加
    2. 新しいブレークポイントを選択し、Control キーを押しながらクリックして、ブレークポイントを編集します。
    3. アクションを追加
    4. 入力: po $arg1

スタック トレースの関連部分はナビゲーター領域にあります。

これはXcode 9でも機能するようです

これは、Xcode 6 以下で使用するための私の追加です。

  1. 入力: po (NSException*) $eax

Xcode 6 では、推論されなくなったため、オブジェクト タイプを明示的に指定する必要があります。

于 2014-12-08T10:34:25.697 に答える
51

Xcode 7-9 の場合 (Jeff の回答に基づく):

ブレークポイント ナビゲーターで:

  1. 追加 (+)、例外ブレークポイントの追加
  2. 新しいブレークポイントを選択し、Control キーを押しながらクリックして、ブレークポイントを編集します。
  3. アクションを追加
  4. 入る:po $arg1
于 2015-12-09T19:28:45.693 に答える
6

はい、xcode はデバッグにはあまり適していません。クラッシュログを少し明確に理解するのに役立つこの記事が気に入っています)) Demystifying iOS Application Crash Logs

「割り当て解除されたインスタンスにメッセージが送信されました」というエラーが表示された場合も、これを行います

「製品 -> スキームの編集 -> ゾンビ オブジェクトの有効化」

これにより、ゾンビ オブジェクトが有効になり、プロジェクトにプロファイルを作成するときに「ゾンビ」を選択すると、エラーが発生し、NSArray *myArray などの割り当てが解除されたオブジェクトを確認できます。

于 2013-06-21T15:35:44.957 に答える
5

例外ブレークポイントが設定されていない場合、取得した情報、po $eaxまたはpo (NSException *)$eaxXcode が出力する情報とは異なるようです。だから私は次のことをします、

  1. 例外ブレークポイントを追加する
  2. 例外が発生し、ブレークポイントにヒットしました ->場所はわかっています
  3. ブレークポイントを一時的に無効にします (デバッグ領域の左側にある 2 番目のボタン)。
  4. プログラムの実行を続行 (デバッグ領域の左側にある 3 番目のボタン)
  5. 詳細が出力される →原因がわかった

明らかにエレガントでも柔軟でもありませんが、少なくとも 2 つの大きな疑問 (どこで、なぜ) が解決されます。

于 2015-09-09T09:18:33.520 に答える