构建时Swift编译器分段错误

ale*_*son 97 swift

在我的文件中添加一个(方便的)计算height属性会导致Swift编译器出现段错误......这里可能出现什么问题?UIViewUIViewExtension.swift

0  swift                    0x00000001061e5608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1  swift                    0x00000001061e5af4 SignalHandler(int) + 452
2  libsystem_platform.dylib 0x00007fff894da5aa _sigtramp + 26
3  libsystem_platform.dylib 0xb03939841e997c88 _sigtramp + 2504775416
4  swift                    0x00000001064c8bb9 swift::NominalTypeDecl::getMembers(bool) const + 41
5  swift                    0x00000001055efab9 swift::irgen::ClassMetadataLayout<(anonymous namespace)::FindClassMethodIndex>::addClassMembers(swift::ClassDecl*) + 329
6  swift                    0x00000001055e97b2 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>, swift::ResilienceExpansion) + 434
7  swift                    0x00000001056550d3 swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 42611
8  swift                    0x000000010564a266 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8678
9  swift                    0x00000001055cb6f8 swift::irgen::IRGenModule::emitGlobalTopLevel() + 184
10 swift                    0x00000001056376e3 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1859
11 swift                    0x0000000105638033 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 51
12 swift                    0x00000001055aa65a frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4842
13 swift                    0x00000001055a935d main + 1533
14 libdyld.dylib            0x00007fff8a82e5fd start + 1
Run Code Online (Sandbox Code Playgroud)

 

1.  While emitting IR SIL function @_TFCSo6UIViewg6heightSd for 'anonname=0x7ff422892fd0' at <path redacted>/UIViewExtension.swift:60:5
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
Run Code Online (Sandbox Code Playgroud)

如果需要更多信息来解决这个问题,请发表评论.谢谢!

编辑:

这是一个相关的.xcodeproj,它返回此问题的编译器错误.在这里下载

Fjo*_*ohn 74

我有这个错误,因为我这样做:

if(currentMeal?.State == .Deleted){

}
Run Code Online (Sandbox Code Playgroud)

代替

if(currentMeal!.State == .Deleted){

}
Run Code Online (Sandbox Code Playgroud)

所以我认为如果条件可以导致此错误,则可选择不解包

  • 这也是我的原因.但那应该是对的吗?它只是一个编译器错误 (3认同)

Bil*_*ill 25

当您在Swift中遇到编译器段错误时,您没有得到方便的行号和错误消息.以下是如何跟踪问题的方法:

  1. 创建SegFaultDebugger.swift项目中调用的新文件.
  2. 在这个新文件中,定义一个给你问题的类的扩展.
  3. 将一组方法从主文件移动到SegFaultDebugger.swift.
  4. 编译.

此时,发生以下三种情况之一:

  • 您仍然可以在原始文件中获得段错误:将方法从SegFaultDebugger.swift后面移动到原始文件并将一组不同的方法移入SegFaultDebugger.swift.重复
  • 你得到了一个段落错误SegFaultDebugger.swift:太棒了!现在使用二进制搜索将segfault固定为特定方法,直到您可以找出导致它的构造.
  • 你得到了有意义的编译错误:太棒了 修复错误.一切都编译完毕后,将方法移回原始文件中.

  • 谢谢!经过几个小时的挠头之后,这很有帮助。 (2认同)
  • 这非常有用!就我而言,我将 NSFetchedResultsControllerDelegate 放在扩展中,将其合并回主类块就足够了。 (2认同)

vic*_*ica 12

我在扩展我的一个协议和错误输入和可选类型参数时遇到此错误.

protocol SomeProtocolName: class {
    var someProtocolVariable: String { get set }

    func someProtocolFunction(someProtocolVariable: String)
}

// MARK:
extension SomeProtocolName {
    func someProtocolFunction(someProtocolVariable: String?) {
        self.someProtocolVariable = someProtocolVariable
    }
}
Run Code Online (Sandbox Code Playgroud)

String原型和String?扩展中函数参数的差异导致了Segmentation Fault 11.

  • 我也得到了这个.看起来Apple的可选输入存在一些问题.一个主要问题是什么时候!在变量类型中使用.默认情况下它是非可选的,但编译器会感到困惑. (3认同)

JNY*_*NYJ 8

我也有这个错误,我这样修好了:

检查您的项目并找出两次使用哪些文件并删除一个,或删除并重新添加所有文件.

我的Xcode中的错误:

:0:错误:文件名"AttributedString.swift"使用两次:'/ Users /.../CNJOB/CNJOB/AttributedString.swift'和'/Users /.../CNJOB/CNJOB/AttributedString.swift'

:0:注意:文件名用于区分具有相同名称的私有声明

:0:错误:文件名"APIClient.swift"使用两次:'/ Users /.../CNJOB/CNJOB/APIClient.swift'和'/Users /.../CNJOB/CNJOB/APIClient.swift'

:0:注意:文件名用于区分具有相同名称的私有声明

命令/应用程序/ Xcode 3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc失败,退出代码为1


Mat*_*ros 7

在Xcode 7中,您可以单击Debug Navigator中的错误,然后您将看到崩溃的展开视图.单击右侧的汉堡按钮可以扩展错误,如果您一直向下滚动到扩展错误消息的底部,您将看到它来自何处.

在此输入图像描述

对我来说,我有两个分段错误错误.在上图中,第一个是折叠时的样子,第二个是展开汉堡按钮时的样子.在展开的灰色框的最底部,您将看到一条消息,指出编译器崩溃的位置.

但请注意,错误消息有时可能不够充分,因此虽然它告诉您崩溃的位置,但并不总是说明为什么以及如何解决它.摆脱这个错误仍然是一个猜测的问题.


gom*_*lon 5

我发现了一个简单的解决方法,直到问题在未来的Xcode/Swift构建中修复:

  • 只需将导致问题的所有扩展名放在.swift正在使用的文件中.

在您提供的示例项目中,放置内容 UIViewExtension.swift 及其 CALayerExtension.swift 上方 AppDelegate.swift

希望这可以让我们编写工作 Swift代码,直到问题得到解决.