首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何捕捉Linux中的分段错误?

如何捕捉Linux中的分段错误?
EN

Stack Overflow用户
提问于 2010-02-28 16:11:51
回答 2查看 135.1K关注 0票数 94

我需要在第三方库清理操作中捕获分段错误。这种情况有时会在我的程序退出之前发生,我不能解决真正的原因。在Windows编程中,我可以使用__try - __catch来做到这一点。有没有跨平台或特定于平台的方法来做同样的事情?我在Linux上需要这个,gcc。

EN

回答 2

Stack Overflow用户

发布于 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;
}
票数 50
EN

Stack Overflow用户

发布于 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);
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2350489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档