我是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;
}
}