デバッグ目的で、Android NDK アプリで SIGSEGV などのシグナルをキャッチしようとしています。そのために、sigaction という名前の sigaction をセットアップしました。
私は今、呼び出しのスタックを取得しようとしています。問題は、_Unwind_Backtrace
現在のスタックでのみ機能し、sigaction が独自のスタック内で実行されることです。
では、シグナルを受信した実行ポインタのスタックを取得する方法はありますか? (基本的_Unwind_Backtrace
に、現在のスタックとは別のスタックを巻き戻すように指示しますか?)
私はそれを指摘する必要があります:
これらの関数は Android NDK で提供されていないため、
backtrace()
とを使用することはできません。backtrace_symbols()
GDB を使用して、ローカル デバイスのクラッシュを調査しています。私は GDB を置き換えたくありません。クライアントにテスト ビルドを送信したときに、意味のあるスタック トレースをクライアントから受信できるようにしたいのです。
編集: fadden によって提案されたシステム/コアから Android の libcorkscrew を使用しようとしましたが、unwind_backtrace_signal_arch 関数を使用すると、クラッシュを表さない奇妙なバックトレースが発生します。