iOS AppのCrash Reportsの処理、分析

3921 ワード

分析Crash report


Appleの公式ドキュメント:Understanding and Analyzing iOS Application Crash Reports
iOSデバイスでは、appがクラッシュすると「crash report」ファイルがデバイスに保存されます.Crash reportファイルには、appがクラッシュしたときの情報が記録されており、通常は各スレッドの呼び出しスタックが含まれています.

Symbolication


crash reportを解析する前に、crash reportのメモリアドレスと関数名、行数を「シンボルマッピング」-Symbolicationする必要があります.
必要なファイル
AppStoreのappバイナリパッケージをアップロード
バイナリパケットに対応する.dSYMファイルAppStoreをアップロードするたびのappバイナリパッケージも.dSYMファイルは必ず保存してください.
この2つのファイルは厳密に1つずつ対応しなければなりません.そうしないと、crash reportは完全なシンボルマッピングができません.コードに変更がない場合でも、生成されたものを再コンパイルする.dSYMファイルは、前回コンパイルしたappバイナリパッケージにも対応できません.
XCodeの"Archive"コマンドを使用することで、互いに対応するappパッケージと.dSYMファイルは、Product->Archiveコマンドが完了すると、XCode OrganizerのArchivedページですべてのArchive済みアプリケーションを表示できます.△appを棚に上げるときは、このような方法で提出することをお勧めします.
互いに対応するappバイナリパケットが存在する場合.dSYMファイルでは、XCodeがこのappで生成したcrash reportを自動的にシンボルマッピングします.
symbolicatecrashツールを使用してマッピングを行うオンラインの操作は、多くのことです.
操作手順
appパッケージを用意します.dSYM、crash reportファイルXCode Organizerにcrash reportをインポートする:XCode Organizerを開く->Devicesオプション->左側のLIBRARYパケットの下のDevices Logsを選択->Importボタンをクリックして選択する.crashファイル.
XCodeでは、Symbolicate crash reportファイルが自動的に表示され、結果が表示されます.
設定をMacに直接接続し、XCode Organizerウィンドウからcrash reportを直接取得している場合は、Symbolicationを自動的に行うことができ、非常に便利です.しかし、多くの場合、私たちはユーザーのcrash reportを分析しています.
シンボルのマッピングに成功しませんでしたか?
私は以上のすべての手順に厳格に従って操作しますが、Crash reportのappに関連する内容は依然としてメモリアドレスが読み取り可能なコード記号にマッピングされていないことを示しています.私は何時間もかけていろいろな関連資料、ソリューションを検索して、ほとんどの方法を試しても記号を解くことができませんでした.
最後にgithubでこのような返事を見つけました.
If you goto Xcode->Organizer click on archives then right-click any archive and select show in finder. Back up to the folder called Xcode that contains the archive. Run terminal and cd to this folder, you can do this easily by typing ‘cd ’ then dragging the folder to the terminal. Now type ‘mdimport .’ and enter. This will take a minute to finish. If you go back to Organizer and find your crash file then press Re-Symbolicate it should now give you method names and line numbers.
彼のやり方で一度操作したが,意外にも成功した.Archive操作が見つかりました.appと.dSYMが存在するディレクトリは、一般的に/Users/ユーザー名/Library/Developer/Xcode/Archives(Organizer ArchivesでArchiveパッケージを右クリックしてアクセス可能)、コマンドラインでcdから/Users/ユーザー名/Library/Developer/Xcode/、コマンドを入力します.
mdimport .

Xcodeディレクトリをspotlightインデックスに追加するには、少し時間がかかるかもしれません.ちょっと待ってください.
必要なものだけをインポートすることもできます.appと.dSYMファイルは、比較的高速です.
元のシンボルが正しくマッピングされない理由は、次のとおりです.
私のappと.dSYMファイルはspotlightにインデックスされず、シンボルマッピングに失敗しました.Appleのドキュメントでは、
If you use the “Build and Archive” command then they will be placed in a suitable location automatically. Otherwise any location searchable by Spotlight (such as your home directory) is fine.

dwarfdumpツール


クラッシュしたメモリアドレスを直接クエリーし、クラッシュコードのファイルと行数を定義します.
必要です.appと.dSYMファイル、詳しくは説明しません.
例:
dwarfdump –lookup 0x000036d2 –arch armv6 MyApp.app.dSYM

私の結果


繰り返しテストした結果、クラッシュの原因は、cococos 2 d-xエンジンのCCBReader拡張でファイルが読み込まれたときに、ARMの下でメモリの位置合わせを考慮せずにクラッシュし、Exception Codes:EXC_ARM_DA_ALIGN.Githubで新しいソースコードが見つかり、問題が解決しました.
変換元:http://go3k.github.io/blog/2013/03/11/ios-crashreport/