- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到我的应用程序有几个具有相同核心数据堆栈跟踪的崩溃报告:
我无法重现此崩溃,但我认为这与 NSManagedObject
关系的级联删除有关。这是通过在堆栈跟踪中看到的对 _propagatePendingDeletesAtEndOfEvent:
的调用来判断的。我的 NSManagedObjectContext
设置如下:
- (NSManagedObjectContext*)managedObjectContext {
if (_managedObjectContext == nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
}
return _managedObjectContext;
}
对于什么可能导致对 -save:
的调用因整个应用程序中的堆栈跟踪而崩溃,您有什么想法吗?
最佳答案
从堆栈跟踪中我只能看到它是一个竞争条件,更具体地说是强属性或变量(可能在字典中)的数据竞争。由于崩溃发生在主线程上,我的第一个猜测是您在后台线程上使用了不应在后台线程上访问的 API。
因为崩溃发生在objc_retain
中。这只是经验。在我看到因保留对象而崩溃的情况中,十分之九是因为数据争用。在另一种情况下,罪魁祸首是手动内存管理做得错误。如果您对更多细节感兴趣,可以查找 objc_storeStrong() 的源码。
第二,Concurrency section in the Core Data Reference有这个有趣的信息:
NSMainQueueConcurrencyType is specifically for use with your application interface and can only be used on the main queue of an application.
The NSPrivateQueueConcurrencyType configuration creates its own queue upon initialization and can be used only on that queue. Because the queue is private and internal to the NSManagedObjectContext instance, it can only be accessed through the performBlock: and the performBlockAndWait: methods.
根据您问题中的代码,您正在使用 NSMainQueueConcurrencyType
,因此核心数据不应在具有此“托管上下文”的后台队列上使用。
我的猜测是您正在从某个后台线程调用核心数据 API。
竞争条件并不总是会导致崩溃。因此,有时无法轻易重现此类崩溃。然而,一切并没有失去。
要查看这是否确实是数据竞争,您必须查看完整的崩溃报告。通过崩溃报告,您不仅可以获得崩溃主线程的回溯,还可以获得崩溃发生时进程的所有其他线程的回溯。 (只需在崩溃报告中搜索“CoreData”即可。)如果您非常不幸,则在任何后台线程上都看不到核心数据 API。不过,在这种情况下,您应该看到至少一个线程具有一些“autorelasepoolpop”框架。如果您在后台堆栈跟踪中发现了一些“CoreData”帧,请在该堆栈跟踪中查找指向您的应用程序代码的帧。这就是罪魁祸首。
为了进行调试,您可以在各处调用一些 assert([NSThread isMainThread]);
调用,无论您在何处调用核心数据 API。如果由于断言失败而崩溃,您就知道问题出在哪里。
如果您使用的是 Xcode 9,您可能想尝试新的“Main Thread Sanitizer”(在“Diagnostics”下的方案设置中,在还配置了“Thread Sanitizer”的同一面板中。您可能想要“暂停讨论问题”)。如果这没有帮助,还可以尝试“Thread Sanitizer”。
您还可以将并发类型切换为 NSPrivateQueueConcurrencyType
。请务必使用 performBlock:
和 performBlockAndWait:
调用包装所有核心数据 API 调用,否则您不会得到更少的崩溃,而是更多的崩溃。如果您确实需要使用后台队列中的核心数据(例如出于性能原因。
如果你幸运的话,这只是某个地方的一个微小的代码错误,可以在 10 分钟内修复:-)。如果您非常不幸,应用程序的并发架构已损坏,您必须(重新)设计它:-/。
希望这有帮助。
关于ios - NSManagedObjectContext -保存: causing SIGSEGV crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45337339/
我是 Arduino 世界的新手。编写了以下代码 - 使用 DHT22 传感器。 12 小时后,当温度低于所需温度时,我的温室的加热器没有打开。 关闭电源并重新打开后,一切恢复正常。我知道这段代码很乱
我正在使用 CENTOS6 和 REDHAWK2.0 (RH2.0)。基于“VirtualBox 5.0.16 for Windows host”和“VirtualBox 5.0.17 r106140
在无渲染模式下使用 VMR-9 时如何解决 SelectAtPosition() 崩溃? 最佳答案 使用无渲染模式时的 SelectAtPosition() 崩溃问题可以通过在自定义分配器中实现 IV
这是我从 logcat 复制的错误。我不知道为什么在应用设置屏幕中清除数据后应用程序崩溃。 02-20 17:22:29.980 839-1094/? I/InputReader: Apps
我收到了来自 Apple 的应用提交反馈: Thank you for your resubmission. We were unable to review your app as it crash
我有一个 iPad 应用程序。使用 Fabric 收集崩溃信息。最近出现了一些像 webthread EXC_BREAKPOINT 这样的崩溃。跟踪堆栈上没有我的代码。所以我不知道为什么会发生崩溃。
我有一个在 ubuntu(EC2 实例,t2.small)上运行的简单 python web-scraper,到目前为止它只打印出一个 url 列表: from bs4 import Beautifu
注意:我的问题之前已关闭,我尝试了此处提到的解决方案 - unknown error: session deleted because of page crash from unknown error
我正在尝试从一个场景过渡到另一个场景,但是当我调用 presentScene 时发生崩溃!场景未存储在类中或被引用,它们直接加载到 presentScene 调用中。 Xcode 崩溃截图: 我的简单
我有点困惑,我的应用程序几乎没有崩溃,崩溃日志也有以下信息。 崩溃:com.twitter.crashlytics.ios.exception 这是否意味着它是 Fabric 库的崩溃还是有效的崩溃?
我尝试在我的 ubuntu 16.04 远程服务器上使用 selenium webdriver 和 python 3.5.2 连接到网页 from pyvirtualdisplay import Di
我正在使用使用 Python 和 Selenium 的 InstaPy。我按 Cron 启动脚本,有时它会崩溃。所以它真的很不规则,有时它会很好地贯穿始终。我也已经在 GitHub Repo 上发帖,
最近我换了电脑,从那以后我无法使用 selenium 启动 chrome。我也尝试过 Firefox,但浏览器实例无法启动。 from selenium import webdriver d = we
我正在使用 InstaPy,它使用 Python 和 Selenium。我按照 Cron 启动脚本,但有时它会崩溃。所以它确实不规则,有时它贯穿得很好。我已经在 GitHub Repo 上发布了,但没
我正在使用 InstaPy,它使用 Python 和 Selenium。我按照 Cron 启动脚本,但有时它会崩溃。所以它确实不规则,有时它贯穿得很好。我已经在 GitHub Repo 上发布了,但没
我正在使用使用 Python 和 Selenium 的 InstaPy。我按 Cron 启动脚本,有时它会崩溃。所以它真的很不规则,有时它会很好地贯穿始终。我也已经在 GitHub Repo 上发帖,
我正在尝试使用rook在kubernetes集群上配置ceph,我已经运行了以下命令: kubectl apply -f common.yaml kubectl apply -f operator.y
我有一个屏幕A,在执行了一些POST API任务后,我启用了一个按钮,然后单击按钮导航到屏幕B。当Reaction Native应用程序冻结并崩溃时,崩溃会随机发生。从其他屏幕导航到屏幕B也不是问题,
我想知道操作系统是否可能导致崩溃,例如我是否有代码,它是否有可能在Windows环境下崩溃而在Linux上却没有崩溃?还是这不可能? 最佳答案 最简单的示例是代码,您的意图是使其与平台兼容,但是您的代
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我是一名优秀的程序员,十分优秀!