私はAndroidネイティブのC++コードを持っています。しかし、バックグラウンドとバックにアプリを送ったときに、それはSIGSEGV
でクラッシュすることがあります。私自身のシグナル処理とスタックトレースを使ってデバッグしたいのですが、このエラーが発生すると、シグナル処理がまったくトリガされません。 JNI_OnLoad
方法にAndroid - JNI/NDK - SIGSEVによるクラッシュ - シグナル処理が開始されない
、私が追加しました:
struct sigaction sighandler;
memset (&sighandler, '\0', sizeof(sighandler));
sighandler.sa_sigaction = &android_sigaction;
sighandler.sa_flags = SA_SIGINFO;
int watched_signals[] = { SIGABRT, SIGILL, SIGSEGV, SIGINT, SIGKILL };
for(int signal : watched_signals)
{
sigaction(signal, &sighandler, &old_sa[signal]);
}
そして、私が持っている:
static struct sigaction old_sa[NSIG];
static void android_sigaction(int signal, siginfo_t *siginfo, void *context)
{
MY_LOG("Sending PID: %ld, UID: %ld\n", (long)siginfo->si_pid, (long)siginfo->si_uid);
old_sa[signal].sa_handler(signal);
}
アプリがバックグラウンドからなるときしかし、android_sigaction
は、エラーのためにtrigerredされることはありません。私はコード内でバグを作成しようとしましたが(配列の範囲外に書く)、ボタンを押してトリガーし、コールバックが正しく呼び出されました。 何が起こっていますか?
@Segio _NR_sigactionとは何ですか? –
'sigaction'に対応するsyscal番号です。それを取得するには ''をインクルードしてください。 –
Sergio
オクラホマ...それは助けましたが、私は1つの希少な "__NR_sigaction" –