境界崩溃,完全没有解释

时间:2015-10-19 17:22:51

标签: realm

我有一个使用CoreData的项目。移植它使用Realm。包括重写一堆测试和创建样本数据。

在我得到EXC_BAD_ACCESS异常的任何地方我很快就会运行它。

当然我在想,也许我应该:

  • 从模拟器中删除应用
  • 删除领域文件

那些东西还在崩溃吗?奇怪的是,似乎查询返回了一些结果,然后它崩溃了。

我在这一点上的主要问题可能是因为这是用C ++编写的,这是一个症状或包装器:它包含某些东西的语法优势很快就会因为很少甚至没有有用的错误报告而被撤消。 / p>

我现在甚至无法进行测试,因为模拟器在启动时崩溃。

问题很简单:除了删除应用程序和领域文件之外还能做什么?我在导致崩溃的代码中唯一做的就是:

  1. 实例化领域
  2. 要求所有给定的对象()
  3. 检查结果的计数是否> 0
  4. 这怎么会导致访问不良?

    更新

    我在应用程序中注释掉了所有Realm代码,因此模拟器将启动然后移回尝试运行测试。我正在使用RealmEnabledTestCase创建一个内存实例,然后运行绝对最简单的测试:创建一个具有一些属性的单个对象然后保存它。崩溃的访问权限很差。

    关于它做什么的问题,这里是符号跟踪:

    nice clear explanation!

    领域实例的配置在测试类中完成。

2 个答案:

答案 0 :(得分:1)

来自Realm的JP。

要解决EXC_BAD_ACCESS错误的一些通常有用的事情(即使没有Realm)也可以查找堆栈跟踪中被解除引用的内容的提示,或者启用Address Sanitizer或zombies运行。有一些SO帖子可以浏览一些调试提示here和raywenderlich.com here

至于您在特定情况下可能发生的情况,很难说,因为您没有完全共享任何代码或步骤供我们重现。我们建议您提交GitHub issue,以便我们帮您解决问题。我们总是尽量做出回应。

最后,Realm的核心是用C ++编写并用Objective-C包装的事实对于在解除引用空指针或访问无效的内存地址时打印有用的错误消息的能力没有任何影响。 Realm的C ++核心中发生的所有错误都报告为断言,并将消息记录到STDOUT,或者作为包含描述性消息的Objective-C异常公开。

答案 1 :(得分:0)

原来我在其中一个属性上有一个不受支持的类型。当然,这在核心数据中永远不会发生,因为它会生成托管对象类。真是浪费时间。这具有很大的潜力,但它完全可以解析模式并输出错误消息以获取不可接受的信息。