构建时Swift编译器分段错误

 huo斌_340 发布于 2023-01-09 11:41

在我的文件中添加一个(方便的)计算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::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*, void*) + 4842
13 swift                    0x00000001055a935d main + 1533
14 libdyld.dylib            0x00007fff8a82e5fd start + 1

 

1.  While emitting IR SIL function @_TFCSo6UIViewg6heightSd for 'anonname=0x7ff422892fd0' at /UIViewExtension.swift:60:5
:0: error: unable to execute command: Segmentation fault: 11
: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

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

编辑:

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

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

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

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

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

    2023-01-09 11:42 回答
  • 我在扩展我的一个协议和错误输入和可选类型参数时遇到此错误.

    protocol SomeProtocolName: class {
        var someProtocolVariable: String { get set }
    
        func someProtocolFunction(someProtocolVariable: String)
    }
    
    // MARK:
    extension SomeProtocolName {
        func someProtocolFunction(someProtocolVariable: String?) {
            self.someProtocolVariable = someProtocolVariable
        }
    }
    

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

    2023-01-09 11:42 回答
  • 我也有这个错误,我这样修好了:

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

    我的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

    2023-01-09 11:43 回答
  • 我有这个错误,因为我这样做:

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

    代替

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

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

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

      创建SegFaultDebugger.swift项目中调用的新文件.

      在这个新文件中,定义一个给你问题的类的扩展.

      将一组方法从主文件移动到SegFaultDebugger.swift.

      编译.

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

    您仍然可以在原始文件中获得段错误:将方法从SegFaultDebugger.swift后面移动到原始文件并将一组不同的方法移入SegFaultDebugger.swift.重复

    你得到了一个段落错误SegFaultDebugger.swift:太棒了!现在使用二进制搜索将segfault固定为特定方法,直到您可以找出导致它的构造.

    你得到了有意义的编译错误:太棒了 修复错误.一切都编译完毕后,将方法移回原始文件中.

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

    在此输入图像描述

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

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

    2023-01-09 11:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有