Android で C++ コードベースを実行しており、ユーザーからクラッシュ レポートを送信してもらいたいと考えています。
Java コードで問題なく動作するACRA ライブラリを使用していますが、ネイティブ コードで何かがクラッシュすると、十分な情報が得られません。実際には、ネイティブ関数呼び出しのスタック トレースを取得したいと考えています。プロセスが終了した後にクラッシュ情報が 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
コードからこのスタック トレースを取得する方法はありますか?