2011-08-30 60 views
5

我正在Linux上移植Windows程序。我的程序使用Windows結構化異常處理(SEH)。 Linux不支持結構化的異常處理,但是它提供了信號處理。我們可以重寫信號來開發類似SEH的範例。Linux中的異常處理

一旦你能夠過濾例外Windows提供了三種備選方案的執行控制流:

1)EXCEPTION_EXECUTE_HANDLER:執行處理 2)EXCEPTION_CONTINUE_SEARCH:前進的例外下一個塊(如果沒有則存在OS) 3)EXCEPTION_CONTINUE_EXECUTION:繼續發生中斷的指令發生異常。

我該如何實現這個控制流在Linux。在Linux中,一旦處理完信號,程序就會從被中斷的地方開始執行。 如何開發continue_search和execute_handler範例?

在此先感謝

回答

5

有沒有簡單的方法做你想要的這裏在C++中。您的工具是標準的C++異常機制,並且sigaction。一個sigaction處理程序可以將控制權返回到它離開的位置。它可以拋出,儘管對此的安全性存在爭議。有人會說它必須設置一個原子變量並返回。 (問題是編譯器認爲沒有投擲的可能性,所以沒有做好準備。)

如果你在C工作,你有其他複雜的選項,涉及sigsetjmp,這是多多少少轉到類固醇,風險和所有。

由於您尚未指定語言或您嘗試處理的特殊情況,因此提供更具體的配方並不現實。

+0

感謝您的回覆。 – Utkarsh

+0

我正在使用C++語言。我可能需要提取此功能並創建共享對象文件。我也擔心我能否支持共享庫中的信號處理。此外,如果應用程序開發人員用其他處理程序覆蓋了信號,該怎麼辦? – Utkarsh

+0

我已閱讀abou sigaction。正如你所描述的那樣,它將控制權返回到它離開的地方。但是,我還需要跳過/執行特定的代碼,繞過現有流程(執行catch塊並繼續在上面的塊中搜索)。不知道如何實現這個功能。 – Utkarsh