読者です 読者をやめる 読者になる 読者になる

Android Native で SIGSEGV が起きたときに Java 例外を VM に通知する

SIGSEGV が起きたときに Java 例外を VM に通知できないかなと思ってコードを書いてみたら出来てしまった。基本的に以下のようなアプローチで SIGSEGV を VM に通知している。

  1. signal 関数を使って SIGSEGV が起きた状況をハンドリング
  2. setjmp/longjmp を使って元の位置までジャンプ
  3. 例外を通知する

Android だと例外が起きたときに Play マーケットに報告できたり (デベロッパーはユーザの報告を確認できる) 、 ACRA を使って例外が起きた状況を調べることが出来るが、 Native 側で死ぬと静かにプロセスが殺されるだけなので確認する手段が無い。

しかし、 Java 例外にしてしまえば調べることが出来る。素晴しい。

追記

とはいえ SIGSEGV が起きている以上、プロセスは速やかに死ぬべきである。