我需要在第三方库清理操作中捕获分段错误。这种情况有时会在我的程序退出之前发生,我不能解决真正的原因。在Windows编程中,我可以使用__try - __catch来做到这一点。有没有跨平台或特定于平台的方法来做同样的事情?我在Linux上需要这个,gcc。
发布于 2010-03-13 06:40:59
下面是一个用C语言实现的例子。
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void segfault_sigaction(int signal, siginfo_t *si, void *arg)
{
printf("Caught segfault at address %p\n", si->si_addr);
exit(0);
}
int main(void)
{
int *foo = NULL;
struct sigaction sa;
memset(&sa, 0, sizeof(struct sigaction));
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = segfault_sigaction;
sa.sa_flags = SA_SIGINFO;
sigaction(SIGSEGV, &sa, NULL);
/* Cause a seg fault */
*foo = 1;
return 0;
}
发布于 2012-12-23 21:17:55
此处提供了C++解决方案(http://www.cplusplus.com/forum/unices/16430/)
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void ouch(int sig)
{
printf("OUCH! - I got signal %d\n", sig);
}
int main()
{
struct sigaction act;
act.sa_handler = ouch;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGINT, &act, 0);
while(1) {
printf("Hello World!\n");
sleep(1);
}
}
https://stackoverflow.com/questions/2350489
复制相似问题