追記 - dSYMファイルの使い方

以前のポスト - dSYMファイルの使い方 の補足です。実際に使ってみました。
http://d.hatena.ne.jp/iphone_dev/20080924/1222256965

最近リリースしたアプリがある操作をすると落ちるという苦情をいただきました。その方にお願いして、クラッシュログを送っていただいたところ、だいたい下のような感じのログでした。


Thread 0 Crashed:
0 libSystem.B.dylib 0x31446cf0 0x313e3000 + 408816
1 libSystem.B.dylib 0x31446cde 0x313e3000 + 408798
2 libSystem.B.dylib 0x31446cd2 0x313e3000 + 408786
3 libSystem.B.dylib 0x314614b4 0x313e3000 + 517300
4 libstdc++.6.dylib 0x30075b6c 0x3000c000 + 433004
5 libobjc.A.dylib 0x300c20fc 0x300bb000 + 28924
6 libstdc++.6.dylib 0x30073100 0x3000c000 + 422144
7 libstdc++.6.dylib 0x30073208 0x3000c000 + 422408
8 libobjc.A.dylib 0x300c1f88 0x300bb000 + 28552
9 CoreFoundation 0x3029a5a4 0x30237000 + 406948
10 Foundation 0x306dbb64 0x3066c000 + 457572
...

アドレスとオフセットのみの何がなんだかわからないログです。
ここで、上記のポストに書いたように symbolicatecrashをつかってみたところ、以下のように...


Thread 0 Crashed:
0 libSystem.B.dylib 0x31446cf0 __kill + 8
1 libSystem.B.dylib 0x31446cde kill + 4
2 libSystem.B.dylib 0x31446cd2 raise + 10
3 libSystem.B.dylib 0x314614b4 abort + 36
4 libstdc++.6.dylib 0x30075b6c __gnu_cxx::__verbose_terminate_handler() + 556
5 libobjc.A.dylib 0x300c20fc _objc_terminate + 160
6 libstdc++.6.dylib 0x30073100 std::terminate() + 88
7 libstdc++.6.dylib 0x30073208 __cxa_throw + 92
8 libobjc.A.dylib 0x300c1f88 objc_exception_throw + 92
9 CoreFoundation 0x3029a5a4 +[NSException raise:format:arguments:] + 76
10 Foundation 0x306dbb64 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 56
.....

これでだいぶはっきりしました!! ここで書いたログにはエラーの手がかりはあまりないのですが、この後のログにヒントが見つかりました。これでうまく修正できそうです。

やはり .dSYMファイルは保存しておくに限ります。くどいですが、AppStoreにサブミットしたバイナリをコンパイルしたときの .dSYMをとっておく必要があります! ご注意を。


もうひとつ。実際は対応する .dSYMファイルのパスをコマンドに与えなくても、Spotlightをつかって対応する.dSYMファイルを自動的に探してくれるらしいです。つまり、


symbolicatecrash ログファイルのパス

で大丈夫です。ご参考までに。