gpt4 book ai didi

iOS 中的 c++ try/catch 无知

转载 作者:行者123 更新时间:2023-11-30 03:36:48 28 4
gpt4 key购买 nike

在我们的应用程序中,我们有一个 C++ 静态库,我使用 Objective-C++ 来处理它。该 c++ 库利用 rapidjson 解析 XML 数据:

try {
rapidjson::Document document;
document.Parse(connection.data.description);
connection.openTime = document["openFrom"].GetInt();
connection.closeTime = document["openTo"].GetInt();
return true;
} catch (std::exception e) {
connection.openTime = 0;
connection.closeTime = 0;
return false;
}

问题是如果 document["openFrom"] 无法通过 GetInt() 方法转换为 Int,则不会引发异常。相反,我的应用程序因 SIGABRT 而崩溃。

Assertion failed: (data_.f.flags & kIntFlag), function GetInt, file /Users/xxx/xxx/xx/ios/../src/rapidjson/document.h, line 1645.

在 Android 操作系统上,顺便说一句,在相同的情况下成功引发异常。可能是什么问题呢?我猜问题出在 Xcode 的 Swift 编译器行为上。

最佳答案

正如您提供的日志中明确指出的那样——它不是崩溃,它只是一个失败的断言,它在内部调用 abort() 导致 SIGABRT 代表“信号中止”。断言在 Release模式下被禁用,因此它应该在那里工作正常。或者您可以禁用 rapidjson 中的断言(通过定义宏 RAPIDJSON_ASSERT)。

关于iOS 中的 c++ try/catch 无知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40487156/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com