我正在Linux上移植一个Windows程序。我的程序使用Windows结构化异常处理(SEH)。Linux不支持结构化异常处理,但是它提供了信号处理。我们可以超越信号来发展类似SEH的范式。
一旦您能够过滤异常,Windows提供了三种替代执行控制流:
1) EXCEPTION_EXECUTE_HANDLER :执行处理程序2) EXCEPTION_CONTINUE_SEARCH :将异常转发到下一个块(如果不存在,则转到OS) 3) EXCEPTION_CONTINUE_EXECUTION :从发生中断的指令继续异常。
如何在Linux中实现这个控制流。在Linux中,一旦处理了信号,程序就会从被中断的地方开始执行。如何开发continue_search和execute_handler范式?
提前感谢
发布于 2011-08-30 13:27:53
在C++中做您想做的事情没有简单的方法。您的工具是标准的C++异常机制和sigaction。sigaction处理程序可以将控制返回到它停止的位置。它是可以扔的,尽管在这个安全问题上一直存在争议。有人会说,它必须设置一个原子变量并返回。(问题是编译器看不到抛出的可能性,因此没有做好准备。)
如果你在C中工作,你有额外的复杂的选择涉及sigsetjmp,这或多或少是类固醇,风险和所有的后藤。
由于您还没有指定语言,或者您试图处理的特殊情况,所以提供一个更具体的菜谱是不实际的。
https://stackoverflow.com/questions/7243788
复制相似问题