一、背景
我々はすべて知っているように、クラッシュの問題のAndroid JNI層は厄介な問題です。Javaは、C / C ++ので層、クラッシュ対向する結果として出力されません
Javaの例外straceのため、クラッシュの位置合わせがより困難に問題です。グーグルBreakpadはのクラッシュからの完全なツールセットです。
クラッシュダンプをキャプチャし、それが対応するツールを提供します。
第二に、目的:クラッシュプログラム、情報を収集するクラッシュプログラムは、クラッシュする場所を検索します
第三に、プログラム
グーグルのbreakpadは、クラッシュダンプとクロスプラットフォームのコレクションのための分析フレームワークとツールです。
Breakpadは、3つの主要コンポーネントで構成されています。
クライアントは、内蔵されたアプリケーションのライブラリーの形で、クラッシュが発生したときにミニダンプファイルを書き込む
シンボルダンパーを、コンパイラによって生成された(デバッグ情報)のデバッグ情報を読み込み、シンボルファイルの生成
プロセッサを、ミニダンプファイルとシンボルファイルを読み込みます読み込み可能なC / C ++スタックトレースを生成します。
単にミニダンプを生成することです、シンボルファイルを生成し、読みやすいスタックトレースに処理をマージします。
第四に、統合
1.クローニングまたはダウンロードbreakpadオープンソースライブラリをします。https://github.com/google/breakpad.git
2.実行のルートディレクトリに移動します。
$ CDはbreakpad &&作る$ ./configureをを
` の後に作ります:
Libbreakpad_client.aは、SRC /プロセッサディレクトリの下minidump_stackwalkツールを[minidump_stackwalk](/アップロード/ 8b56c60770516b83344378e22ab64874 / minidump_stackwalk)を生成し、SRC /クライアント/ linuxディレクトリの下に[libbreakpad_client.a](/アップロード/ 33f43e7fad5ec0fa5358c5fc9373e1db / libbreakpad_client.a)静的ライブラリファイルを生成しますクラッシュログをエクスポートするための、
SRC /ツール/ Linuxで[dump_syms](/アップロード/ 05ca888d36dd5dfe4b0927e881ae775c / dump_syms)dump_symsツールの生成/シンボルファイルを導出するためのディレクトリをdump_syms。
3. README.ANDROID参照breakpadディレクトリの下に2つの統合方法、あります。
注:この直接使用sample_appは、アプリの使用のために、あなたは直接android.mkファイルのジンにsample_appを含むことができ、
(1)直接統合する.A方法を追加し、ライブラリファイルにコンパイル.A
NDKにコンパイラを可能にする(2)を使用しインポートモジュール、
ここで使用する(2)の方法、android.mk詳細な文書でジンsample_appディレクトリ[Android.mk](/アップロード/ bf07e5cc4ce46a87045203239a5eade4 / Android.mk)
(1)直接例/アンドロイド/ sample_app
(2)タグJNI / Android.mk内を添加
LOCAL_CPPFLAGS:= -pie -fPIE -D__STDC_FORMAT_MACROS - D__STDC_LIMIT_MACROS
LOCAL_LDFLAGS: = -pie -fPIE
注:android.mkサンプルアプリフォルダジンフォルダを参照してください。
(3)コードを追加main.cppに[test_breakpad.cpp](/アップロード/ 6becceec0fad8db20eda02f623ef9866 / test_breakpad.cpp)
書式#include <stdio.hに> の#include "クライアント/ linuxの/ハンドラ/ exception_handler.h" の#include "クライアント/ linuxの/ハンドラ/ minidump_descriptor.h" 名前空間{ BOOL DumpCallback(constがgoogle_breakpad :: MinidumpDescriptor&記述子、void *型のコンテキスト、 BOOL成功){のprintf( "ダンプパス:%のSの\ n"、descriptor.path())。 復帰に成功しました。 } //このクラッシュはテスト用です。あなたがプロジェクトに追加した場合、それを削除し 、ボイドクラッシュ(){ 揮発int型* A = reinterpret_castは<揮発性のint *>(NULL); * A = 1。 } } //名前空間 メインINT(INTのARGC、チャー* ARGV []){ google_breakpad :: MinidumpDescriptor記述子( "/ SDカード")。 google_breakpad :: exceptionHandlerのEH(記述子、NULL、DumpCallback、NULL、真、-1); クラッシュ(); //これはテスト用です。あなたがプロジェクトに追加した場合、それは削除 0を返します。 }
この時点で、あなたはアンドロイドcocos2d-xのプロジェクトをコンパイルすることができ、およびSDカードの下に/で結果のクラッシュファイル、DMPファイルの接尾辞
ファイブテスト
指示をビルドします。
$ CDのアンドロイド/ sample_app $ NDKビルド
どこに有効なAndroidのNDKのインストールに$ NDKがポイント。「NDKビルド」を実行した後、test_google_breakpad名前の多くのバイナリファイルが存在します
使用説明書:
後buildindテストプログラム、デバイスに送信し、その後、としてそれを実行します
シェルUID:
$ adbのプッシュのlibs / armeabi / test_google_breakpad /データ/ローカルの/ tmp $ adbのシェル/データ/ローカルの/ tmp / test_google_breakpad
PS:しかし、あなたは 『RUN_TEST』の私達のシェルは、すでにそれらを含めたことに「tが、これらの2つのステップを行う必要がありドン。
これは単に、生成ミニダンプの名前をダンプした後にクラッシュします
ファイル[a1ee9a8a-21bc-4e2b-85046fab-20468514.dmp](/アップロード/ 52f61416273700a479a323df4d382412 / a1ee9a8a-21bc-4e2b-85046fab-20468514.dmp)
そして.DMPのファイルをプルするのadbのコマンドを使用します。
詳細については、JNI / test_breakpad.cppを参照してください。
第六に、分析の結果
注意:あなたが必要とするすべてのもの.DMPのファイルをプルするのadbのコマンドを使用することで、分析すること。
新しいディレクトリにsample_appダンプファイル、およびコピーコマンドdump_symsは、次のダンプディレクトリにminidump_stackwalk。
`` `
CP breakpad-マスター/ SRC /ツール/ linuxの/ dump_syms / dump_syms ./Dump
CP breakpad-マスター/ SRC /プロセッサ/ minidump_stackwalk ./Dump
`` `
ファイル生成SYM [test_google_breakpad.sym](/アップロード/ 54fa8d709f89fa17e5ba027ce44dc7c1 / test_google_breakpad.sym)
$のCDダンプ
$。/ dump_syms test_google_breakpad> test_google_breakpad.sym
注:OBJ /ローカル/ armeabi-v7aディレクトリ内test_google_breakpad、我々のアプリで、あなたはダンプディレクトリをコピーする必要があります
その後、新しいフォルダ内のシンボルをダンプし、シンボルtest_google_breakpadフォルダに新しいフォルダを作成し、
test_google_breakpad.symという名前のファイルの最初の行に16進数の文字列に新しいファイルフォルダをtest_google_breakpad
フォルダは、このファイルには、16進数の文字列のフォルダへの移動をtest_google_breakpad.symます。
ファイル生成crashed.log [crashed.log](/アップロード/ 79a0fdf3aebf28307c9caf98dba1d559 / crashed.log)
$のCDダンプ
$。/ minidump_stackwalk XXXX-XXXX-XXXXX-xxxx.dmpシンボル> crashed.log
注:必ずDMPファイルのディレクトリを作成し、シンボルが同じレベルであります
ファイルを開くCrashed.log、ローカルプログラムのクラッシュを表示