web-dev-qa-db-ja.com

SIGABRTの原因を追跡する方法

例の目的でこの問題のコードを示していますが、実際に私の質問は次のとおりです:SIGABRTエラーを追跡して理解する方法は?私はこの質問を読みました: sigabrt with error message 、しかし、これは私の問題に関係するとは思いません。

以下に示す例は明らかにxibの問題ではなく、以前はSIGABRTを取得することは未処理の例外と関係があるように思われました。 GDBのbtを使用してみましたが、これは役に立ちません。表示するより包括的なダンプはありませんか?私もNSZombieを使用しましたが、使用方法が本当にわかりません。したがって、それがあなたの答えである場合は、関連データを取得する方法に関するドキュメントへのリンクを提供してください。

ここに私の例があります:Core Dataを使用しようとしています。私のプロジェクトはもともとセットアップされていなかったので、手動で追加する必要がありました。プロジェクト>ビルドフェーズ>ライブラリとバイナリをリンク>プラスをクリックしてCoreData.frameworkを追加しました。

次に、[ファイル]> [新規]> [データモデル]に移動して、データモデルを作成しました。かなりの数の属性を作成しましたが、それだけです

その後、適切なメソッドをアプリデリゲートに追加しました(Core Dataを使用して新しいプロジェクトを作成し、メソッドをコピーすることでこれを行いました)。

//code removed, as its not needed for the question/answer

この後、管理対象オブジェクトに値を保存しようとしました(もう一度、新しいプロジェクトでデフォルトの実装からコピーされたコード):

//code removed, as its not needed for the question/answer

ただし、addTimeメソッドを実行すると、SIGABRTエラーが発生します。

xcode error

41
owen gerig

オブジェクトが未実装のメッセージを受信すると、SIGABRTが上昇します。アプリにはいくつの警告がありますか?それらを調べて、「一部のオブジェクトが一部のセレクタに応答しない可能性がある」という警告を見つけてください。これらすべてからアプリを削除すると、おそらく正しく動作するようになります。

編集:非常に役立つ以下のコメントからの回答:

さて、ここで大砲になります-ブレークポイントを使用してみましたか?プロジェクトエクスプローラーの6番目のタブを開き、左下隅で[+]-> [例外ブレークポイントの追加]-> [完了]をタップします。これにより、アプリをクラッシュさせるメソッド呼び出しでアプリを停止する例外ハンドラーが追加されます。

編集:xCode 5.0の時点で、ブレークポイントの作成中にブレークポイントがキャッチする例外を指定する必要がなくなりました。 +->例外ブレークポイントを追加するだけでいいのです。

enter image description here

72
Eugene