linux中的异常处理

linux中的异常处理,linux,exception-handling,Linux,Exception Handling,我正在Linux上移植一个Windows程序。我的程序使用Windows结构化异常处理(SEH)。Linux不支持结构化异常处理,但它提供信号处理。我们可以忽略信号来开发类似SEH的范例 一旦能够过滤异常,Windows将提供三种可选的执行控制流: 1) 异常\u执行\u处理程序:执行处理程序 2) 异常\继续\搜索:将异常转发到下一个块(如果不存在,则转发到操作系统) 3) 异常\继续\执行:从发生中断的指令继续异常 如何在Linux中实现此控制流。在Linux中,一旦处理了信号,程序就会从中

我正在Linux上移植一个Windows程序。我的程序使用Windows结构化异常处理(SEH)。Linux不支持结构化异常处理,但它提供信号处理。我们可以忽略信号来开发类似SEH的范例

一旦能够过滤异常,Windows将提供三种可选的执行控制流:

1) 异常\u执行\u处理程序:执行处理程序 2) 异常\继续\搜索:将异常转发到下一个块(如果不存在,则转发到操作系统) 3) 异常\继续\执行:从发生中断的指令继续异常

如何在Linux中实现此控制流。在Linux中,一旦处理了信号,程序就会从中断的地方开始执行如何开发继续搜索和执行处理程序范例?


<>谢谢你

在C++中没有简单的方法来实现你想要的。您的工具是标准C++异常机制,以及<>代码>
sigaction
处理程序可以将控制返回到停止的位置。它可以抛掷,尽管关于它的安全性一直存在争议。有人会说它必须设置一个原子变量并返回。(问题是编译器看不到抛出的可能性,因此没有做好准备。)

如果你在C语言中工作,你会有更多复杂的选择,包括
sigsetjmp
,这或多或少是在类固醇、风险和其他方面


<>因为你没有指定语言,或者你想处理什么特殊情况,所以提供一个更具体的配方是不实际的。< / P>我使用C++语言。我可能需要提取此功能并创建共享对象文件。我还担心我是否能在共享库中支持信号处理。此外,如果应用程序开发人员使用其他处理程序覆盖了该信号,该怎么办?我已经阅读了有关sigaction的内容。正如您所描述的,它将控制权返回到停止的位置。但是,我还需要跳过现有流跳转/执行特定代码(执行catch块并在上面的块中继续搜索)。不确定如何实现此功能。我已经阅读了有关sigsetjmp的内容。但是,当我使用多个线程并且其中很少有线程同时收到异常时,它将无法支持。您不能从处理程序内部发出常规(pthreads)条件信号,然后从线程执行处理吗?您可以有一个专用于响应信号的信号监视线程,以便立即响应。使用适当的队列以支持并发事件,并可能存储元数据(时间信号、线程信号…),谢谢你的帖子。我不熟悉这种常规(pthreads)条件的详细信息。你能给我指一些API吗?我可以在手册页中循环详细信息。