HarmonyOS 系统库中含有std::exception类型信息导致catch异常?

1、在DevEco Studio中新建一个Native C++项目。

2、在生成的CMakeLists.txt的target\_link\_libraries中添加libbundle\_ndk.z.so。

3、在生成的napi\_init.cpp的Add代码块中加入如下代码:

try {
  throw std::invalid_argument("test_exception");
} catch (std::exception &) {
}

4、运行entry,点击中心的Hello World就会崩溃。

预期的效果是,因为std::invalid\_argument是std::exception的派生类应当能被捕获,这里查了一下发现是libbundle\_ndk.z.so中也有std::exception的type\_info导致的(见下图),把libbundle\_ndk.z.so从链接库中去掉即可正常运行。

阅读 451
1 个回答

1、将一个指向一个基类对象的指针或引用转换为指向派生类对象的指针或引用时,如果类型转换是不安全的或不合法的就会引发异常。

2、

try {
  throw static_cast<std::exception>(std::invalid_argument("test_exception"));
} catch (const std::exception &) {
}
logo
HarmonyOS
子站问答
访问
宣传栏