Android,std::runtime_error没有被std::Exception捕获

问题描述 投票:0回答:1

我在 Android 上有以下代码:

try {
  LOGI("OP SQLITE 🟦", "Before exception");
  throw std::runtime_error("Test exception");
} catch (const std::exception &exc) {
  auto what = exc.what();
  LOGE("OP_SQLITE ERROR 🟥", what);
} catch (const std::runtime_error &exc) {
  LOGE("OP_SQLITE ERROR 🟠", "Blah");
}

在我的日志上:

17:04:15.539  I  OP SQLITE 🟦
17:04:15.539  E  OP_SQLITE ERROR 🟠

在 iOS 上,第一个捕获可以正确捕获异常,但在 Android 上,只有第二个捕获能够捕获错误。我想要一个适用于所有平台的捕获。我正在使用 NDK 的最新版本,并且还在我的

build.gradle
:

中使用共享 libc
cppFlags "-std=c++17", "-frtti", "-O2", "-fexceptions", "-DONANDROID"
            abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
            arguments "-DANDROID_STL=c++_shared",
              "-DSQLITE_FLAGS='$sqliteFlags'",
              "-DUSE_SQLCIPHER=${useSQLCipher ? 1 : 0}",
              "-DUSE_CRSQLITE=${useCRSQLite ? 1 : 0}",
              "-DUSE_LIBSQL=${useLibsql ? 1 : 0}",
              "-DUSE_SQLITE_VEC=${useSqliteVec ? 1 : 0}",
              "-DUSER_DEFINED_SOURCE_FILES=${sourceFiles}",
              "-DUSER_DEFINED_TOKENIZERS_HEADER_PATH='${tokenizersHeaderPath}'"

在我的 cmakelists.txt 上:

set (PACKAGE_NAME "op-sqlite")
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set (CMAKE_CXX_EXTENSIONS OFF)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -fexceptions -frtti -stdlib=libc++")
set (BUILD_DIR ${CMAKE_SOURCE_DIR}/build)

有什么想法可能是错的吗?

编辑:

查看 std::runtime_error 的定义,我看到了这一点,所以看起来它的定义是正确的

STDLib runtime_error definition

android c++ android-ndk
1个回答
0
投票

事实证明这是 React Native 上的一个问题。尽管我的代码是正确的,但内部有些东西被破坏了,但是runtime_error没有被正确映射到通用的std::exception。

https://github.com/facebook/react-native/issues/48027

© www.soinside.com 2019 - 2024. All rights reserved.