私はC++コードベースをAndroid上で実行しており、ユーザーからのクラッシュレポートを送信したいと考えています。ネイティブコード - プログラムで関数呼び出しスタック(バックトレース)を取得する方法
私はACRA libraryを使用していますが、Javaコードでは問題なく動作しますが、ネイティブコードで何かクラッシュした場合、十分な情報が得られません。実際には、ネイティブ関数呼び出しのスタックトレースを受信したいと思います。プロセスが終了したらクラッシュ情報がlogcatに出力され、logcatを読み書きするようにACRAを設定できます。シグナルハンドラを使用してネイティブクラッシュを検出し、ACRAによるレポートのためにJavaにコールバックするコードをセットアップしました。それはまたうまくいく。
しかし、この方法ではタイミングが悪いです - クラッシュプロセスがまだ生きている間にACRAがログを読み込み、クラッシュしたプロセスが完全に終了した後にAndroidがクラッシュレポートをlogcatに書き込んでいます。だから私はACRAを使うときにスタックトレースを受け取らない。
C++コードから現在のスタックトレースをプログラムで読み込み、この情報をACRA(または他のクラッシュ報告ツール)にフィードする方法を探しています。
私に必要なのはlogcatに書かれたこの報告書のいくつかの種類である:
10-10 08:29:13.868: INFO/DEBUG(1121): #00 pc 0003fc7c /data/data/com.ex.lib/libapp.so
10-10 08:29:13.891: INFO/DEBUG(1121): #04 pc 00016df4 /system/lib/libdvm.so
10-10 08:29:13.891: INFO/DEBUG(1121): #05 pc 00045284 /system/lib/libdvm.so
10-10 08:29:13.899: INFO/DEBUG(1121): #15 pc 00047c56 /system/lib/libdvm.so
10-10 08:29:13.922: INFO/DEBUG(1121): #16 pc 00030e4c /system/lib/libandroid_runtime.so
が私のコードからこのスタックトレースを取得する方法はありますか?
あなたのapk内で定義された2番目のアクティビティになる可能性があります - 2番目のアプリをインストールする必要はありません –
はい、これはREAD_LOGSが必要になり、ユーザに疑念を抱かせる可能性があります – scooterman