iPhoneアプリ開発をしているとたまに出会うEXC_BAD_ACCESS
アプリがクラッシュした際に原因を探るクラッシュログの表示方法をメモ。
xcode4からなのか、とても簡単にみれるようになっていた。
How to Show crash log on xcode4.
【手順】
1.iPhoneでテストしたいアプリを起動する。
2.いじり倒してクラッシュさせる(してはダメだけども)
4.xcodeのメニューから「window」 > 「organizer」でオーガナイザー起動
5.「organizer」 から「Devicesを選択」
6.「organizer」の左に表示される、
「◯◯のiPhone」を選択した後、「Device Logs」をクリックする。
7.クラッシュログのスキャンと生成が自動的に行われる。
進行状況は「organizer」下に表示される。
8.iPhoneを繋げたままアプリをクラッシュさせた後など、ログを再度生成するには、
「6」をもう一度行う。
次は何がクラッシュの原因なのか、クラッシュログを読んでみた。
クラッシュログには以下の情報が含まれる。
・クラッシュしたアプリとデバイス情報
・クラッシュの種類
・スレッドごとのスタックトレース情報
Last Exception Backtrace:という箇所は、
クラッシュ直前までのメソッド呼び出しの追跡情報がのってます。
バックトレース情報を追っていくと、
4番目にあたるUINibのクラスメソッド呼び出しの後に、、
4 UIKit 0x32db3747 -[UINib instantiateWithOwner:options:] + 1567
例外が発生している。
3 CoreFoundation 0x30ba57db +[NSException raise:format:] + 35
xibファイルが怪しいと思い、「show in finder」でプロジェクトファイルをみた所、
以前nibファイルのローカライズ対応を試していたファイルが残っていた。
余分なファイルを削除後、きちんと動くようになった。
.crashファイルの場所や、シンボル解決のコマンド等はクラッシュログに関して、
以下サイトがとても詳しく参考になりました。
http://bit.ly/AstH3e
作業中、ライブラリフォルダを表示しないと見られないファイルが多いので、
隠しファイル表示方法をしらない方は以下を参考にしてみて下さい。
Mac OS X Lionで隠しファイルを表示する