首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux3 3/gcc46 46:“-fnon-call”,哪些信号在捕获指令?

linux3 3/gcc46 46:“-fnon-call”,哪些信号在捕获指令?
EN

Stack Overflow用户
提问于 2012-02-10 09:20:23
回答 1查看 2.3K关注 0票数 6

(环境: gcc/g++ 4.6.1在Linux3.0/ -std=gnu++0x模式下.)

代码语言:javascript
复制
#include <stdlib.h>
#include <signal.h>
#include <iostream>

using namespace std;

class SegmentationFault {};

void ThrowSegmentationFault(int)
{
    throw SegmentationFault();
}

void ohno(char* x)
{
    *x = 42;
}

int main()
{
    signal(SIGSEGV, ThrowSegmentationFault);

    try
    {
        ohno(0);
    }
    catch (const SegmentationFault&)
    {
        cout << "success" << endl;
    }
}

通过使用-fnon调用异常标志编译上述代码,它允许SIGSEGV信号处理程序抛出异常,并且在运行时它将打印“成功”。-fnon呼叫例外gcc旗的文档如下:

生成允许捕获指令抛出异常的代码。请注意,这需要特定于平台的运行时支持,而这种支持并不是无处不在的。此外,它只允许捕获指令抛出异常,即内存引用或浮点指令。它不允许从SIGALRM等任意信号处理程序引发异常。

我的问题是,哪些信号是诱捕指令的,哪些不是?

代码语言:javascript
复制
#define SIGHUP           1
#define SIGINT           2
#define SIGQUIT          3
#define SIGILL           4
#define SIGTRAP          5
#define SIGABRT          6
#define SIGIOT           6
#define SIGBUS           7
#define SIGFPE           8
#define SIGKILL          9
#define SIGUSR1         10
#define SIGSEGV         11
#define SIGUSR2         12
#define SIGPIPE         13
#define SIGALRM         14
#define SIGTERM         15
#define SIGSTKFLT       16
#define SIGCHLD         17
#define SIGCONT         18
#define SIGSTOP         19
#define SIGTSTP         20
#define SIGTTIN         21
#define SIGTTOU         22
#define SIGURG          23
#define SIGXCPU         24
#define SIGXFSZ         25
#define SIGVTALRM       26
#define SIGPROF         27
#define SIGWINCH        28
#define SIGIO           29
#define SIGPOLL         SIGIO
/*
#define SIGLOST         29
*/
#define SIGPWR          30
#define SIGSYS          31
#define SIGUNUSED       31
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-10 09:31:09

SIGILL、SIGTRAP、SIGBUS、SIGFPE、SIGSEGV、SIGSTKFLT是最有可能的同步信号(即由硬件产生的,因为指令试图做一些无效的事情)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9225415

复制
相关文章

相似问题

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