2011-10-06 16 views
29

私はBugSenseからのクラッシュレポートを持っていますので、クラッシュのメモリ位置に関する情報がありますが、それらは記号ではありません。また、Bug Senseは伝統的なクラッシュレポートを送信しませんが、それでも私にバグを与えます。だから私はAtosを使って自分のクラッシュの正確な場所を取得しようとしています。私はXcode 4でアプリケーションをアーカイブし、そのバージョンを使ってApp Storeに提出したので、dSYMファイルがあります。これが起こっかもしれない理由をアトスはアーカイブされたアプリケーションのdSYMからシンボルを取得できません

atos cannot load symbols for the file MyApp.app.dSYM for architecture armv7 

任意の提案:しかし、代わりに適切な出力を得るための、私はエラーが発生します

atos -arch armv7 -o MyApp.app.dSYM 0x001057e9 

:?私は、次のコードを実行していますか私はアプリからデバッグシンボルを取り除いているわけではありません。

答えて

86

が正しくアーカイブされたアプリのdSYMファイルからシンボルを取得し、BugSenseのクラッシュレポートから有用な情報を取得する(またはそのことについては、他のクラッシュレポート)するには、次の

  1. コピーテキストエディット、または任意にBugSenseからスタックトレース他のテキストエディタ。単にテキストをコピーするのではなく、「クリップボード」アイコンを使用してください。さもなければ、atosを使用して参照を検索し、スタックトレースをシンボリックするために必要な、スタックトレースの実際のメモリ位置を取得しません。
  2. XCodeを開いてオーガナイザに移動
  3. アーカイブを見つけて右クリックして、ファインダで開きます。
  4. アーカイブのディレクトリに移動し、特定のアーカイブに通常~/Library/Developer/XCode/Archives/YYYY-MM-DD/
  5. 移動し、dSYMsフォルダ
  6. あなたはファイルMyApp.app.dSYMが表示され、あなたが考えること、これは私がatosを実行する必要がありますファイルに対して!これは間違っています。 実際に別のパッケージです!cdこのパッケージには、MyApp.app.dSYM/Contents/Resources/DWARFというフォルダにあり、単にMyAppという別のファイルがあります。これは実際のdSYMファイルです。
  7. atos -arch armv7 -o MyApp 0x0000000(またはメモリアドレスが何であれ)を実行してエラーの場所を確認するか、単にatos -arch armv7 -o MyAppを入力して対話モードにしてください。
+19

うわー、ステップ6はここで大いに役立ちました。ありがとう! – pt2ph8

+1

"-arch armv7" - 本当に重要です、私はそれがなければ間違ったデータを持っています – AlexeyVMP

+2

私はバックトレースを持っていますが、クラッシュログはありません、これはまだ動作しますか?私はランダムな場所を与えるように見えます。私のバックトレースの例を次に示します:MyApp 0x00054b23 MyApp + 301859 – jjxtra

3

正しいアドレスを取得する必要があります。上記のソリューションを使用することができますが、正しいメモリアドレスを得るには16進数計算を使用する必要があります。スライド+スタックアドレス - ロードアドレス。

+1

この回答は、上記の値を取得する方法を示しています:http:// stackoverflow。com/questions/13574933/ios-crash-reports-atos-not-working-as-expected/13576028#13576028 – Kerni