未捕获 C++ 异常(Qt 项目)

标签 c++ qt exception shared-libraries ice

我的问题如下:

有一个名为 Interface.so 的共享库,它基于 ICE(互联网通信引擎),类似于用于频繁重复任务的包装器。其中一项任务是注册一个主题(类似于一个 id)。如果该主题不存在,ICE 会抛出一个名为 NoSuchTopic 的异常。

如果我将 Interface.so 与独立 Qt 应用程序一起使用,我可能会捕获 NoSuchTopic 异常并在 catch block 中创建主题(catch block 驻留在 Interface.so 中)。 但是我想在飞行模拟器的插件中做同样的事情,它本身就是一个共享对象——这里的异常没有被前面提到的 Interface.so 中的 catch block 捕获。 相反,飞行模拟器崩溃说明

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

nm -C -D 表示“IceStorm::NoSuchTopic”在 Interface.so 中未定义。这个可以吗?或者应该有一个引用在哪里可以找到定义?我已经为 libIceStorm.so (libs += -lIceStorm) 添加了条目,其中 IceStorm::NoSuchTopic 被定义(根据 nm),但这并没有改变任何东西!

我也试过 '-Wl,-E' 但我不知道我是否在 Qt Creator 中正确设置了这个选项。这有什么帮助吗?

如果有任何提示,我将不胜感激。

最佳答案

我以前遇到过这个问题,通常是因为类型信息不可用。

您通常可以使用 try {} catch (...) {} block 捕获异常,因为即使缺少类型信息,它也可以捕获异常,但它并不是特别有用!

如果共享库隐藏了符号,这通常是个问题,请参阅 GCC Visibility文章,尤其是“C++ 异常问题(请阅读!)”部分。

This question建议使用额外的标志。

有时,如果某些内容是针对旧版本的库构建的,则干净重建会解决问题。如果干净重建解决了问题,请检查您的构建脚本是否正确。

关于未捕获 C++ 异常(Qt 项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908567/

相关文章:

c++ - loop-malloc.c : No such file or directory vector 中的段错误

python - IMDbPy : How can I catch IMDbDataAccessError?

java - 应用程序崩溃后重启

c++ - 如何在C++中异步读取文件?

c++ - 具有平凡项(零乘积项)的 g++ 优化算术表达式

c++ - 为特定进程的特定运行设置环境变量

c++ - Qt QCompleter 不能设置它的大小?

c++ - 如何获取某些点的Voronoi图在QT中显示?

c++ - 在 Linux Ubuntu 中使用 C++ 过滤以太网数据包

objective-c - 哪些方法会引发 NSInvalidArgumentException?