【发布时间】:2023-02-11 01:50:13
【问题描述】:
我正在尝试使用异常处理程序来捕获错误的内存访问,但我不完全确定如何去做。我尝试用 sigaction 注册它,但我的处理程序没有触发..
#include <stdio.h>
#include <signal.h>
void handler(int sig)
{
//exception should land here
printf("caught exception");
}
int main(int argc, const char * argv[]) {
struct sigaction act;
act.sa_flags = SA_SIGINFO;
sigemptyset(&act.sa_mask);
act.sa_handler = handler;
if(sigaction(SIGSEGV, &act, NULL)==-1){
printf("Could not register handler");
}else{
printf("handler registered\n");
}
*(int*)0 = 0;//throw exception
return 0;
}
一旦进入处理程序,我如何读取线程上下文寄存器?
【问题讨论】:
-
通常,在 SIGSEGV 处理程序中您无能为力。这通常是因为内存已损坏,您尝试的任何操作都可能受到该损坏的影响。
-
stdout 只会在完整的一行之后显示文本,试试
printf("caught exception\n"); -
@Barmar 我确实计划实际处理需要在某种程度上操纵文本部分的异常
-
@teapot418 我尝试放置新行但仍然没有触发..有没有一种可靠的方法可以检查实际触发的异常处理程序?而且我怎样才能读取处理程序中的寄存器?
标签: c