SIGSEGV收到后如何恢复过程?

时间:2014-03-09 07:11:29

标签: android-ndk java-native-interface

我正在使用google breakpad捕获导致SIGSEGV信号的错误操作。我希望这个过程能够继续,但是由dalvik jvm在android中完成。我如何从完成Android的过程中恢复过程?

1 个答案:

答案 0 :(得分:1)

您是否尝试过this

#include <signal.h>
#include <stdio.h>
#define __USE_GNU
#include <ucontext.h>

int *p = NULL;
int n = 100;

void sighandler(int signo, siginfo_t *si, ucontext_t* context)
{
    printf("Handler executed for signal %d\n", signo);
    context->uc_mcontext.gregs[REG_RAX] = &n;
}

_your_amazing_method (jenv *env, jobject obj, _your_args)
{
    do_some_dirty_stuff();
    signal(SIGSEGV, sighandler);
    printf("%d\n", *p); // ... movl (%rax), %esi ...
    return 0;
}