新版Swift 3.1/Xcode 8.3中出现“Abort Trap: 6”错误。

5
我有一个已经完成的项目,其中包含约30个版本控制系统、Firebase、Googlemaps集成等等——也就是说它是一个非常复杂的大型项目。这是一个基于地理位置的游戏,在几个月的工作后我终于完成了它。
在新的Swift 3.1/Xcode 8.3中尝试编译时,它之前可以正常工作和编译,但是在更改了一些行的推荐语法以清除新的XCODE 8.3错误后,编译失败并显示“Abort Trap:6”错误。
这是调试器的最后几行(在此之前有大约100行不可理解的文件名/数字等)。

0 swift 0x00000001089f1eb7 PrintStackTraceSignalHandler(void*) + 39 1 swift
0x00000001089f1366 SignalHandler(int) + 646 2 libsystem_platform.dylib 0x00007fffc602eb3a _sigtramp + 26 3 libsystem_platform.dylib 0x0000000100000001 _sigtramp + 972887265 4 libsystem_c.dylib 0x00007fffc5eb3420 abort + 129 5 swift
0x0000000106454644 swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt, llvm::Optional) + 38404 6 swift
0x00000001064564fa swift::ModuleFile::getType(llvm::PointerEmbeddedInt) + 2106 7 swift 0x000000010644f373 swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt, llvm::Optional) + 17203 8 swift
0x0000000106459f24 swift::ModuleFile::maybeReadPattern(swift::DeclContext*) + 740 9 swift 0x000000010644f605 swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt, llvm::Optional) + 17861 10 swift
0x00000001064607c8 swift::ModuleFile::loadAllMembers(swift::Decl*, unsigned long long) + 600 11 swift
0x0000000106840f0d swift::NominalTypeDecl::getMembers() const + 125 12 swift 0x0000000106828c75 (anonymous namespace)::Traversal::visitNominalTypeDecl(swift::NominalTypeDecl*) + 869 13 swift 0x0000000106826645 (anonymous namespace)::Traversal::doIt(swift::Decl*) + 277 14 swift
0x000000010619a75f swift::SILPassManager::SILPassManager(swift::SILModule*, llvm::StringRef) + 1471 15 swift 0x00000001061a135f swift::runSILDiagnosticPasses(swift::SILModule&) + 159 16 swift
0x0000000105811282 swift::performFrontend(llvm::ArrayRef, char const*, void*, swift::FrontendObserver*) + 42866 17 swift
0x00000001057c088c main + 9052 18 libdyld.dylib
0x00007fffc5e1f235 start + 1 Stack dump:

这是一段关于IT技术的大约150行难以理解的调试数字/文件/字母 - 最后是以下内容:

  1. 在模块 'googleMapsPractice' 中加载 'homePage' 成员时
    1. 在 'googleMapsPractice' 中反序列化 PatternBindingDecl #295
    2. 在 'googleMapsPractice' 中反序列化 'gameDBRef' (VarDecl #296)
    3. 在 'googleMapsPractice' 中反序列化 decl #1009 (XREF)
    4. 与模块 'FirebaseDatabase' 进行交叉引用... FIRDatabaseReference

我真的卡住了,不知道从哪里开始调试。'homePage.swift' 是游戏设置页面 VC,并且是调试器中唯一引用的 VC,有没有常见的解决 Abort Trap 6 错误的方法,我可以尝试在这个 VC 上排除问题?它可能有2000行代码,而且我甚至不确定问题是否出现在该 VC 中,因为调试器非常模糊。

非常感谢任何帮助。


1
在C语言中,“Abort trap:6”指的是超出内存限制的写入,通常发生在写入不够大的数组时。 - GlennRay
感谢您的评论-我使用的所有数组都可以正确编译,直到Xcode 8.2-有没有办法检查哪个特定的数组可能会导致这种情况?我有几个数组,在代码中使用.append添加它们时没有任何问题。另外-您是否知道上面的调试器消息是否意味着问题出现在“homepage.swift”中,还是仍然可能出现在其他地方? - Apneist
我假设你已经尝试了常见的解决方法,比如重启Xcode、清理项目、删除派生数据等等,对吗?如果没有,你可能想先尝试这些方法,如果问题仍然存在,提供编译器错误的完整截图可能会帮助别人帮助你。如果你可以与我分享项目,我也很乐意帮忙看看,但我有一种感觉你可能不太愿意 :) - Fahim
谢谢Fahim - 是的,我已经尝试了你提到的所有方法,但都没有成功。我会尝试在今天稍后发布一张快照 - 现在正在使用手机 - 呵呵,不幸的是不能与任何人分享该项目 :) - Apneist
我在上面的问题中添加了更多信息 - 这几乎是我得到的所有相关调试器信息。我还将CocoaPods更新到最新版本,仍然出现相同的错误,它无法编译。 - Apneist
7个回答

2
这种情况发生在我有一个私有枚举类型的主类和该类的扩展中。这两个都位于同一文件中。比较棘手!

1
在我的情况下,是因为我在对象的init方法中放置了一个!符号。像这样:

init(obj1: Object1, obj2: Object2!) {

}

去掉函数参数的感叹号,就不会再出现错误了。


1
在我的情况下,似乎是由于本地项目方案缺失,在我的应用程序尝试链接到该项目时出现了构建阶段的问题。

1

我遇到了错误,因为我的类名与文件名不同。更正了文件名后,一切都正常了。


1
我遇到了同样的问题。最终我发现,它是由于覆盖任何从NSObject继承的类上的'var description'引起的。我注意到,在Swift 3.1中,NSObject上有一个'class func description()',我不一定记得在Swift 3.0中有这个函数(虽然我可能在这个假设上容易犯错;我从未需要查找或使用它)。另请参见https://forums.developer.apple.com/thread/75700

0

我通过在模拟器中切换到另一个设备来解决了这个问题 - 然后它成功编译和运行了。

然后,当我回到之前的设备时,它也正常工作了。

我没有任何解释!


0
我遇到了与 Swift 类相关的问题,这些类具有来自React的类型为RCTRootView的属性。通过将该属性设置为私有,就可以解决该问题,像这样:
class MyViewController: UIViewController {
  var rctView: RCTRootView()
}

转换成类似这样的内容:

class MyViewController: UIViewController {
  private var rctView: RCTRootView()
}

看起来错误在于尝试在编译过程中过早地反序列化来自其他模块/框架的类(在您的情况下是FirebaseDatabase,在我的情况下是React)。将此属性设置为私有使得编译器不需要在稍后的编译过程中执行此操作。如果我要猜测,似乎我们正在掩盖一些依赖项/构建顺序问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接