簡體   English   中英

未捕獲C ++異常(Qt項目)

[英]C++ Exception not caught (Qt Project)

我的問題如下:

有一個名為Interface.so的共享庫,它基於ICE(Internet通信引擎)和類似包裝程序的頻繁執行的任務。 這些任務之一是注冊一個主題(類似於id)。 如果此主題尚不存在,則ICE會引發一個名為NoSuchTopic的異常。

如果我將Interface.so與獨立的Qt應用程序一起使用,則可能會捕獲NoSuchTopic異常並在catch塊中創建主題(catch塊位於Interface.so中)。 但是我想在飛行模擬器的插件中做同樣的事情,它本身就是一個共享對象-在這里,Interface.so中前面提到的catch塊未捕獲到異常。 而是,飛行模擬器崩潰,提示

 terminate called after throwing an instance of 'IceStorm::NoSuchTopic' 

nm -C -D表示Interface.so中未定義'IceStorm :: NoSuchTopic'。 這個可以嗎? 還是應該在哪里找到定義的參考? 我已經為libIceStorm.so(libs + = -lIceStorm)添加了條目,其中定義了IceStorm :: NoSuchTopic(根據nm),但這不會改變任何內容!

我也嘗試過'-Wl,-E',但是我不知道我是否在Qt Creator中正確設置了此選項。 這完全有幫助嗎?

我將不勝感激每一個提示。

我以前遇到此問題的原因通常是由於類型信息不可用。

您通常可以使用try {} catch (...) {}塊來捕獲異常,因為即使缺少類型信息,它也可以捕獲異常,但這並不是特別有用!

如果共享庫中隱藏了符號,這通常是一個問題,請參閱“ GCC可見性”文章,尤其是“ C ++異常問題(請閱讀!)”一節。

這個問題建議使用額外的標志。

如果針對庫的舊版本構建了某些內容,則有時會進行徹底的重建來解決問題。 如果徹底重建解決了該問題,請檢查您的構建腳本是否正確。

從源代碼構建時,聽起來像以前的版本使用了“ no-exceptions”標志。 它為構建增加了很多時間,因此很多人放棄了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM