まとまりのないブログ

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

最新のraspberry piのCPU性能がintel Atomの性能を超えていた件

超小型なシングルボードPCであるraspberry piの性能について、結構前からその存在は知っていたのだけれどまだまだ普通のデスクトップPCとかで使われるIntel Atomプロセッサにはかなわない …

no image

猫にファーミネーターを使ってみた

猫の抜け毛がコロコロでは対処しきれなくなったのでファーミネーターという抜け毛を取る道具を使ってみた。安かったので期待はしてなかったが一応取れることは取れる。というか、キリがない。30分ぐらいやってみた …

no image

Microsoft データ リンク エラー

ACCESSのMDBファイルにADO接続設定しようとしたらエラーが出た。ずっと前にも出たことがあったような気がするが完全に記憶から抜け落ちていた。ウィザードにある「接続チェック」ではどうもうまくいかな …

no image

無課金で神々を攻略

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

no image

FUJITSU PRIMERGY MX130 S1 PGM1311BAD を購入してみた

またntt-xで格安PCを購入。12980円がクーポン適用で10980円ということで、特に緊急で必要というわけではないが、迷うのなら買っておこうということで即注文。富士通のパソコンなんてこれまで買った …