1

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

次のような行を取得する代わりに、クラッシュ レポートに気付いた場合:

libsqlite3.dylib 0x30531ce4 0x30506000 + 179428

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

29 マイアプリケーション 0x00059260 マイアプリケーション + 4704

2 つのアドレスを取得する代わりに、真ん中に「MyApplication」を取得するように見えます。Atos は最初のアドレスでは機能しません。

ここに画像の説明を入力

4

1 に答える 1

2

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

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

したがって、今のところ、3番目の列のgive addressを使用し、0x1000atosを呼び出すときに値を追加します。

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

于 2012-05-14T09:33:24.687 に答える