异常错误“线程 3:EXC_BAD_ACCESS(代码=2,地址=0x16dbc7ff0)”中的代码是什么意思?

What does that code mean in exception error "Thread 3: EXC_BAD_ACCESS (code=2, address=0x16dbc7ff0)"?

提问人:daniel 提问时间:8/5/2022 最后编辑:daniel 更新时间:8/5/2022 访问量:209

问:

我在 iOS 版 Xcode 项目的调试运行期间遇到了运行时错误。该项目在运行 iOS 15.5 的 iPhone 8 设备上运行。我在运行 macOS Monterey 版本 13.4.1 的 Mac Pro 上使用 Xcode 版本 12.5。

错误消息发生在我初始化自定义结构的一行代码中。

线程 3:EXC_BAD_ACCESS(代码=2,地址=0x16dbc7ff0)

这是我的相关代码。错误消息以红色显示,其中 GroupLocalCache 正在初始化。

import Foundation
import CloudKit

// Wrap a CKRecordZone and its caches (each record type should have its records saved in the caches.
//
final class Zone {
    let cloudKitZone: CKRecordZone
    let caches = [BaseLocalCache]()
    private var groupCache: GroupLocalCache
    
    init(cloudKitZone: CKRecordZone, container: CKContainer, cloudKitDB: CKDatabase) {
        self.cloudKitZone = cloudKitZone
        self.groupCache = GroupLocalCache(container: container, cloudKitDB: cloudKitDB, cloudKitZone: cloudKitZone)
    }
    
}

下面是 GroupLocalCache 的代码:

final class GroupLocalCache: BaseLocalCache {
    let container: CKContainer
    let cloudKitDB: CKDatabase
    let zone: Zone
    
    private var serverChangeToken: CKServerChangeToken?
    private var groups = [Group]()
    
    init(container: CKContainer, cloudKitDB: CKDatabase, cloudKitZone: CKRecordZone) {
        self.container = container
        self.cloudKitDB = cloudKitDB
        self.zone = Zone(cloudKitZone: cloudKitZone, container: container, cloudKitDB: cloudKitDB)
        
        super.init()
        
        fetchChanges() // Fetching changes with a nil token to build up the cache.
    }
}

BaseLocalCache 是 BaseLocalCache 类的修改版本,该类随 CloudKitShare Xcode 项目一起提供,来自以下 Apple 网页:与其他 iCloud 用户共享 CloudKit 数据

我想在消息中查找“code=2”中“2”代表什么。

堆栈溢出* 和 Apple 开发者论坛上针对同一错误的其他帖子解决了与我的代码中的错误不同的特定情况。

我想知道错误的低级原因是什么,所以我需要知道异常错误消息中显示的那些代码是什么,因为它们告诉异常错误的真正原因是什么,比通常发现的有关异常错误的帖子的答案要低。

我想我曾经在 Apple 以外的另一个来源找到过这些代码的文档。硬件制造商似乎将一些代码用于“架构”,例如“arm64”和“armv7”。我在 Xcode 项目构建设置中看到了这些。

我真的需要知道错误消息中给出的每个代码代表什么吗?

我在 Apple 的开发者文档中找到了这篇文章:

了解崩溃报告中的异常类型

我在 Google 的搜索中找到了有关 Apple 异常处理框架的文档:异常处理。我看不出我需要什么。这个框架似乎比我目前需要的要多。

iOS Xcode 异常 exc-bad-access

评论

1赞 vadian 8/5/2022
设置异常断点以获取详细信息。
0赞 daniel 8/5/2022
哦。好的,谢谢。我以前使用过异常断点。我应该在条件字段中输入什么?这往往是不确定的。我应该在条件字段中输入“EXC_BAD_ACCESS”吗?
0赞 vadian 8/5/2022
否,请将该字段留空。
1赞 Larme 8/5/2022
你没有一个递归调用,最后有无限的调用吗?崩溃时,检查 stakctrace。从我所看到的,您正在初始化一个区域,初始化一个缓存,初始化一个区域,初始化一个缓存,等等......

答:

1赞 Larme 8/5/2022 #1

您目前有一个无限循环的对象创建。这就是你崩溃的原因。

崩溃时,不要犹豫,看看调用堆栈,你应该看清楚。

初始化,调用初始化,调用初始化,调用初始化,调用初始化,等等。ZoneGroupLocalCacheZoneGroupLocalCache

因此,您需要更改对象的逻辑。