まとまりのないブログ

something which something is something

交差運転日記

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

投稿日:

xcodeでクラッシュする場合の話。

return UIApplicationMain をキャッチしてマウスカーソルを合わせるとEXC_BAD_ACCESSとだけ出る。コンソールログには何も出ていない。ゆえにどこで何が原因かということがまるでわからない。私の場合は特に処理の重いルーチンで発生していて、クラッシュの再現性もできなく不規則的に発生するので困難を極めた。それでもバグを取り除かなければならないのでまず手始めにやることはログの情報量を増やすことから始める。Edit SchemeからDiagnosticsタブでデバッグ時のオプションを選択できるようになっているので、そこからログに関係する項目にチェックしてコンソールに表示される情報を増やす。Loggingの項目のどれでもいいが例えばLog Dynamic Linker API Usageにチェックを入れて実行してみたところ変数名とその値がログに表示されるようになる。とりあえずその状態でデバッグをしてみることにする。クラッシュの再現性は不規則であったが、ログを確認してみると特定の関数内の変数に関わるところでクラッシュしているというのがわかった。クラッシュの原因は厳密にはわからないもののどこでクラッシュが発生しているかという関数の場所はログに表示される変数名から特定することができた。結局原因はプロパティ変数にアクセスする際のささいなミスだったんだけれども。

原因不明のEXC_BAD_ACCESSがでるクラッシュでもデバッグオプションでログの情報量を増やせば怪しい箇所を特定することができる。クラッシュした時に原因となる箇所がログに表示されれば一番いいのだけれど、表示されない場合もあるのでそういう場合は実行中にログを流し続ける設定にしてクラッシュしたらその直前のログをチェックして場所を限定する、という具合にやると厄介なバグでも修正できるかもしれない。

デバッグのオプション設定

Memory Management

Enable Malloc Scribble
Enable Malloc Guard Edges
Enable Guard Malloc
Enable Zonbie Objects

Runtime Sanitization

Enable Address Sanitizer Requires recompilation

Logging

Distributed Objects
Malloc Stack
Log Dynamic Linker API Usage
Log Library Loads

Dubugger

Stop on Debugger() and DebugStr()

-交差運転日記

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

SSL対応とSSL非対応

SSLとは簡単に言うと通信時の内容を暗号化するネットワークの通信手段。これにより第三者に通信内容を傍受されたとしても、暗号化されているためどのような内容か解読することが困難になる。ECサイト利用時にク …

no image

無課金で神々を攻略

神々攻略パーティ(無課金)

no image

ゴールド免許を取る

5年間無事故で無違反ならば、更新後に交付される免許証の帯の色がゴールドになる。ゴールド免許を簡単に取る方法は、車の運転を極力控えるようにうすることで、自動的に無事故で無違反になりゴールド免許になる。ど …

no image

apache2の設定備忘録

mod_rewriteの有効化 mod_rewriteはurlをリダイレクトする処理に使う。apache2では下記コマンドで有効化を行う。 # a2enmod rewrite proxy_ajpの有効 …

no image

iPhoneアプリを公開して2ヶ月のダウンロード数

初めて作ったiPhoneアプリを公開して2ヶ月が経過した。ソフトの内容はマイナースポーツのスコアを記録するというだけの需要がどれだけあるのかわからない無料アプリ。2ヶ月振りにアップデートをしてみたので …