使用Ptrace使SIGSEGV处理例程无法正常工作

时间:2015-05-06 14:52:22

标签: c debugging signals sigsegv ptrace

我是ptrace的新手,我无法解决这个问题。 我已经复制并编辑了一个使用ptrace系统调用创建的简单调试器,我正在尝试调试一个只使用SIGSEGV处理程序的测试程序...基本上我正在使用的是虚拟程序是:

    void segv_handler(int signum){
  printf("I'm inside the routine\n");
}

void main(){

  int h;

  signal(SIGSEGV, segv_handler);
  printf("Hello\n");
  raise(SIGSEGV);
  printf("Hello2\n");

}

简单..重点是我的调试器收到SIGSEGV的通知,事实上我在屏幕上看到SIGSEGV printf的结果,而程序没有打印"我' m在例程"内,意味着segv_handler被忽略了。这怎么可能?我该如何解决这个问题?

    if(WIFSTOPPED(status)){
        switch(WSTOPSIG(status)){

            case SIGTRAP:
                //printf("SIGTRAP\n");
                break;

            case SIGSTOP:
                printf("SIGSTOP\n");
                break;

            case SIGSEGV:
                printf("SIGSEGV\n");
                //ptrace();
                break;

            default:
                printf("else\n");
                break;
        }
    }

0 个答案:

没有答案