JNIを多く使用するアンドロイドプロジェクトを開発しています。ネイティブアプリケーションコードと連携して動作します。実行時にAndroid上のネイティブレイヤーでスタックトレースを取得する方法
多くの場合、ネイティブアプリケーションコードの一部がクラッシュし、Javaアプリケーションが停止することがあります。私は、シグナルハンドラを導入して、セグメンテーションをキャッチするか、またはその種のものがネイティブレイヤーで発生するようにして、Javaレイヤーにアプリケーション全体を正常かつ完全にシャットダウンするよう通知して、次回起動時に正常に動作するようにします。
私はネイティブレイヤーにまだいくつかのクラッシュが残っている段階に達しましたが、ログカットは今どこで、なぜこれが起こっているのかをデバッグするのに十分ではありません。
誰でもネイティブアプリケーションのセグメンテーション/シグナル処理に関するスタックトレースをキャプチャする方法を教えてください。ネイティブコードは、AndroidのNDKツールチェーンを使用してコンパイルされ、apkでantを使用してリンクされます。
私は、ネイティブレイヤーで何が起こっているかを知るための方法を必死にしています。
ありがとうございました。
おかげで、しかし、これらの両方の方法が必要一方的に実行されていても、もう一方で実行されていてもかまいません。 しかし、私は、アプリケーションが配備されて顧客側で実行され、問題が発生したときに、ログカットの出力や他の方法で問題を報告できる方法が必要です(ファイルダンプ)を返します。 ところで、実行時にスタックトレースをキャプチャするには、クラッシュ時とJVMがプロセスを終了する前に、コードを介して何らかの方法が必要です。私は既にクラッシュハンドラを書いています。 – Puneet
これを反映するために質問を編集し、 "手動実行"の意味を説明し、どのように "手動で実行する"フリーソリューションを想像してください。 – ognian
さて、手動で実行すると、クラッシュが発生した後にスクリプトを実行するか、アプリケーションを実行する前にndk-gdbを実行する必要があります。ある意味では、IDEまたはadbを使ってプログラムを実行します。 私は、アプリケーションがダウンロードされ、インストールされて実行される方法を参照していました(この場合、adbまたはIDEは利用できません)。 – Puneet