【问题标题】:How to catch EXC_BAD_ACCESS when NSKeyedArchiver calls encodeObjectNSKeyedArchiver 调用 encodeObject 时如何捕获 EXC_BAD_ACCESS
【发布时间】:2019-10-23 16:43:42
【问题描述】:

正常运行且没有问题的单元测试现在因错误 EXC_BAD_ACCESS (code=EXC_I386_GPFLT) 而崩溃。这是相关的堆栈跟踪:
显然,无法对数组的元素进行编码,可能是因为使用其哈希值访问字典失败。由于这发生在 SQLQueue 线程中,我怀疑另一个线程在编码期间确实修改了字典。
问题是如何捕捉到这样的问题?

编辑:我无法在方案中启用 Thread Sanitizer,因为我有一个 Watch Extension,这会阻止它。

【问题讨论】:

    标签: ios multithreading dictionary exc-bad-access


    【解决方案1】:

    您的问题是如何赶上崩溃? 如果是的话,

    对于 Objective-C,NSSetUncaughtExceptionHandler

    对于斯威夫特

    signal(SIGABRT, handler)
    signal(SIGILL, handler)
    signal(SIGSEGV, handler)
    signal(SIGFPE, handler)
    signal(SIGBUS, handler)
    signal(SIGPIPE, handler)
    

    更新: 刚才搜了一下,好像有其他人讨论过

    How to catch a Swift crash and do some logging

    【讨论】:

    • 是的,我的问题确实是如何捕捉错误。我想就我而言,我可以试试signal(SIGSEGV, handler)。但是在处理程序中要做什么?设置断点?
    猜你喜欢
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2011-02-25
    相关资源
    最近更新 更多