2012-05-13 8 views
1

MyApplicationは、NSExceptionインスタンスを使用してパーソナライズされたクラッシュレポートを作成します。アプリケーションは、callStackSymbols配列を取得し、テキストファイルに追加します。atosを使用したシンボル化

あなたがクラッシュレポートに気付いた場合、代わりにこのような行を取得する:0x30531ce4 0x30506000 + 179428

libsqlite3.dylib

私はこの1つ

のような行を取得しています

29 MyApplicationを0x00059260 MyApplicationを+ 4704

2つのアドレスを取得する代わりに、私は "MyApplication"を途中で取得します。 Atosが最初のアドレスで動作していません。

enter image description here

答えて

2

アプリのバイナリはデバッグシンボルが含まれているので、あなたはそうcallStackSymbolsはすぐにアドレスを解決することができます呼び出し、symbolicated結果を得ます。唯一の欠けている部分は、行番号です。これは、シンボルがアプリの一部であると自動的には取得できません。

3つの数値は、Address = Base Address + Offsetです。これは、最初のアドレスがシンボルを取得するのに十分であることを意味します。ベースアドレスは、バイナリ/フレームワークの開始アドレスです。ほとんどの場合、記号化が行われると、最初のアドレスは、絶対アドレスではなく、フレームワークアドレスに関連して変更されます。アプリのバイナリメモリ領域は通常0x1000から始まります。これは、クラッシュレポートのバイナリイメージセクションで見ることができ、新しいiOSバージョンの新しいメモリ機能により、0x1000と異なる場合があります。

これで、3番目の列に与えられたアドレスを使用し、atosを呼び出すときに0x1000を値に追加するだけです。

一般に、PLCrashReporterに基づくフレームワークを使用することをお勧めします。これは、クラッシュレポートのすべての情報を提供します。すべてのスレッドとバイナリイメージを標準のクラッシュレポート形式に含め、App Storeでも使用できます。

関連する問題