linux gcc try,linux3 / gcc46:“-fnon-call-exceptions”,哪些信号正在捕获指令?

(环境:Linux 3.0 / x86_64上-std = gnu 0x模式下的gcc / g 4.6.1 …)

#include

#include

#include

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-call-exceptions 标志编译以上内容,它允许 SIGSEGV 信号处理程序引发异常,并且在运行时它将打印“成功”。

-fnon-call-exceptions gcc标志的文档内容如下:

生成允许捕获指令引发异常的代码。请注意,这需要特定于平台的运行时支持,而该支持并非在每个地方都存在。而且,它仅允许陷阱指令引发异常,即内存引用或浮点指令。它不允许从任意信号处理程序(例如SIGALRM)引发异常。

我的问题是哪些信号正在捕获指令,哪些不是?

#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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值