我有一個名爲ftest的測試程序。它加載包含測試的.so文件,並運行它在其中找到的測試。其中一個測試加載並運行一個.so,其中包含一個用於我們的O/RM的Postgres數據庫驅動程序。來自共享對象(.so)的Linux上的異常
當Postgres驅動程序拋出在.so文件中定義的異常(或者它鏈接到的但ftest沒有鏈接到的)並被測試框架捕獲時,異常析構函數會觸發段錯誤。
這段錯誤發生時編譯的例外是在已經動態加載(使用進入dload)一個.so。
這種事情在Windows具有相同的體系結構正常工作。我們並不想限制自己只使用來自核心庫的異常 - 插件應該可以自由地創建自己的異常類並使它們正常處理。
異常是std :: exception的子類。有時可能會在庫中定義異常(如libpqxx),這意味着異常有時也不受我們的控制。
異常被拋出使用類似:
throw exception_class(exception_arguments);
而且使用被發現:
catch (std::exception &e) {
// handler code
}
有沒有得到這個工作需要一些特殊的編譯器選項?我們是否需要切換到通過throw new exception_class(args)
(我們不是真的想這樣做)拋出異常?
它實際上是具有問題的析構函數不是捕獲。如果它是虛擬表的位置,我不會感到驚訝 - 也許.so不會爲表加載的頁面提供讀取權限,因此無法讀取析構函數。儘管這是純粹的猜測。 我會看看我是否可以解決如何通過Boost.Build設置這些選項。 – KayEss 2009-06-17 09:27:01