【问题标题】:Command failed due to signal: Abort trap: 6由于信号,命令失败:中止陷阱:6
【发布时间】:2015-06-09 06:52:34
【问题描述】:

从 Xcode 7 和 Swift 2.0 开始,我得到了上面的错误,就像这里显示的屏幕截图一样:

我不知道这是从哪里来的,清理和删除派生数据不起作用。

还有其他人遇到这个问题吗?

项目设置:

目标设置:

【问题讨论】:

  • 也有这个,想不通。目前在 WWDC,所以想问问开发人员。
  • @DanielvanderMerwe 你有机会问开发人员吗?
  • 使用 Xcode 7 新编写的代码出现同样的问题
  • 同样的问题,但仅限于优化级别未设置为 -Onone
  • 这似乎在 Xcode 7 beta 6 中得到了修复,我现在可以编译大型项目,甚至可以进行整个模块优化,这在以前是不可能的。

标签: swift xcode


【解决方案1】:

我在保护结构中使用相同的常量名时遇到了这个问题

let activityVC = ...
        
guard let activityVC = activityVC else { return }

但是 xcode 没有显示任何关于这一行的警告。

【讨论】:

  • 谢谢,遇到了同样的问题!
  • 哦,同样的问题。幸运的是我找到了你的答案,你节省了我的时间。
  • 同样的问题,Xcode 版本 12.5.1 (12E507)
  • 对我来说是同名的关闭
  • 你是最棒的
【解决方案2】:

转到项目构建settings -> Swift Compiler - code generation -> Optimization Level ->对于调试和发布选择选项“快速,单文件优化[-O]

【讨论】:

  • 这发生在我的 XCode 10.1 上。优化级别已更改为“无优化”、“优化速度”或“优化大小”,​​速度是发布的默认值。我已经改变了它的大小——至少它是这样的——而且它起作用了。
  • 对我来说,唯一有帮助的就是关闭 Release 的优化。
  • 即使这样可行也不是一个好主意,因为它会干扰调试器。
【解决方案3】:

我对所有 Xcode 6.3 项目都有同样的问题,我在 Xcode 7.0 中打开。 我创建了一个新项目,复制了所有源文件和资源,一切正常,没有出现此编译器错误。 我认为这与项目设置有关。 我将 Swift compile Optimization 关闭为“none”,并且 Trap 6 消失了。或许还有其他设置,也会产生麻烦,但对我来说就是这样。

【讨论】:

  • 我确实在 Swift 编译器中设置了优化级别 - 代码生成已经设置为无调试...我真的很想避免复制所有资源文件,希望丹尼尔得到一些答案WWDC...
  • 有两种设置,一种用于项目,一种用于目标。通常,如果您更改项目,目标也会更改,但不是现在。问题是,“Fast [-O]”的写法略有不同。因此,请转到目标和项目并将 swift 编译器都更改为无,如果您已经看到“无”,请先选择快速,然后在弹出菜单中选择“无”。这有点棘手。
  • 我从我的设置中添加了图像,我猜它们是你的意思,对吧?不幸的是,这种方式不起作用
  • 我和 swalkner 有同样的问题,它与任何优化设置、项目或目标无关。
  • 我已经转换了大约 15 个项目和所有工作。我将 LLVM 7.0 编译器设置设置为“最快 [-O3]”并使用 Xcode Build 7A120f。 Swift 编译器设置在我的项目中看起来有点不同。没有“安全检查”,也没有“AppStore”,也没有“AdHoc”,而是我设置为 Fast[-O] 的“Release”,因为在调试模式下不需要它。如屏幕截图所示,调试设置为无 [-Onone]。您是否可以给我邮寄一个显示错误的小项目,以便我可以测试它是否在这里运行。我在 Retina Mac Book pro 15" 上使用 Mac OS X 10.10.3。是否有新项目运行?
【解决方案4】:

这对我有用,所以试试吧。将代码从 swift 3 转换为 swift 4 时出现此错误。

只需转到 Project>Target>Build Setting 并搜索“Swift Compiler - Code Generation”并将优化级别设置为“No Optimization[-Onone]”。

【讨论】:

    【解决方案5】:

    就我而言

    错误

    override func observeValueForKeyPath(keyPath: (String!)?, ofObject object: (AnyObject!)?, change: ([NSObject : AnyObject]!)?, context: UnsafeMutablePointer<Void>)
    

    好的

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [NSObject : AnyObject]?, context: UnsafeMutablePointer<Void>)
    

    【讨论】:

    • 我遇到了类似的问题,将override func touchesBegan(touches: Set&lt;UITouch&gt;, withEvent event: UIEvent!?) 更改为override func touchesBegan(touches: Set&lt;UITouch&gt;, withEvent event: UIEvent?) 解决了这个问题。我认为转换为 Swift 2 将 UIEvent! 转换为 UIEvent!?
    • 我在我的项目中搜索了!.?\?的正则表达式并没有找到任何东西......但我想它的方向是正确的,我只是不知道我必须做什么搜索...
    【解决方案6】:

    我在 XCode 7 Beta 5 上也遇到了这个错误。在我清理构建之后,我收到另一个错误,说我的一个类不符合我刚刚更改的协议。在我解决问题后,它会构建。我所做的协议更改是将方法的两个参数类型从Int更改为Int32

    【讨论】:

      【解决方案7】:

      就我而言,

      编译器会给我以下信息:

      Incorrect number of arguments passed to called function!
      %4 = call %swift.type* @_T015SimplifiedCoder6StructVMa() #1, !dbg !3112
      <unknown>:0: error: fatal error encountered during compilation; please
      file a bug report with your project and the crash log
      <unknown>:0: note: Broken function found, compilation aborted!
      

      但我意识到我错过了一个默认的泛型参数:

      class Class<K> {
          init<T: Protocol>(_ value: T) where T.Key == K {}
      }
      
      protocol Protocol {
          associatedtype Key
          static func getClass<NewKey>(_: NewKey.Type) -> Class<NewKey>
      }
      
      struct Struct<K>: Protocol {
      
          typealias Key = K
      
          static func getClass<NewKey>(_: NewKey.Type) -> Class<NewKey> {
              let _self = Struct<NewKey>()
              return Class(_self)
          }
      }
      
      protocol CanGetClass {
          associatedtype StructType: Protocol
      }
      
      extension CanGetClass {
          func getClass<Key>(_: Key.Type) -> Class<Key> {
              return StructType.getClass(Key.self)
          }
      }
      
      struct R: CanGetClass {
          typealias StructType = Struct
      }
      

      改变:

      typealias StructType = Struct
      

      到:

      typealias StructType = Struct<Int>
      

      CanGetClass 的扩展试图在不完整的类型上调用 getClass。

      【讨论】:

        【解决方案8】:

        我什么时候收到的:

        protocol ProtocolA {
            associatedtype BType: ProtocolB
        }
        
        protocol ProtocolB {
            associatedtype AType: ProtocolA
        }
        

        【讨论】:

          【解决方案9】:

          确保您没有在类扩展中实现私有协议。大多数情况下,拥有私有协议会很奇怪,但不是必需的,具体取决于您希望封装的内容。

          类似的,在同一个文件中:

          class C: ... {
          }
          
          extension C: P {
          }
          
          private protocol P: class {
          }
          

          这样做你一定会得到Command failed due to signal: Abort trap: 6

          改为从协议中删除private 修饰符,错误得到修复。

          【讨论】:

            【解决方案10】:

            我在尝试运行测试时收到此错误。 为了解决这个问题,我把这个脚本放到了终端中:

            rm -rf ~/Library/Developer/Xcode/DerivedData

            删除派生数据解决了问题

            【讨论】:

              【解决方案11】:

              我能够通过更改桥接头来解决它。在我的情况下,添加换行符就足够了。很奇怪的bug。

              【讨论】:

                【解决方案12】:

                我在guard语句中使用了类似的常量“name”,导致这个错误。

                guard let model = DataModel(JSON: response),
                      let model = model.first else { return }
                

                在上面的例子中,常量名“model”被使用了两次,改用新的常量名。

                guard let parsedObj = DataModel(JSON: response),
                      let model = parsedObj.first else { return }
                

                注意:Xcode 编译器不会在编译时警告您。

                还请检查此答案,这有助于确定此错误的原因。 https://stackoverflow.com/a/67620285/5433935

                【讨论】:

                  【解决方案13】:

                  我的代码因为嵌套函数而崩溃。 示例代码如下:

                  错误:

                  extension UILabel {
                      
                      var attributedTextTruncates: Bool {
                          
                          guard numberOfLines > 0 else { return false }
                          return countLabelLines() > numberOfLines
                          
                          func countLabelLines() -> Int {
                              guard let myText = attributedText else {return 0}
                              
                              let labelSize = myText.boundingRect(with: CGSize(width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, context: nil)
                              return Int(ceil(CGFloat(labelSize.height) / self.font.lineHeight))
                          }
                      }
                  }
                  

                  正确代码:

                  extension UILabel {
                      
                      var attributedTextTruncates: Bool {
                          guard numberOfLines > 0 else { return false }
                          return countLabelLines() > numberOfLines
                      }
                      
                      private func countLabelLines() -> Int {
                          guard let myText = attributedText else {return 0}
                          let labelSize = myText.boundingRect(with: CGSize(width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, context: nil)
                          return Int(ceil(CGFloat(labelSize.height) / self.font.lineHeight))
                      }
                  }
                  

                  【讨论】:

                    【解决方案14】:

                    在我的情况下,将函数中的参数值设置为 nil 会导致错误。

                    之前:

                    public func comparableValidator<T: Comparable>(minValue : T? = nil, maxValue : T? = nil, value: T) -> Void {
                        if let min = minValue {
                            _assertFunc(min <= value, "\(value) must be at least \(min)")
                        }
                    
                        if let max = maxValue {
                            _assertFunc(max >= value, "\(value) must be at most \(max)")
                        }
                    }
                    

                    之后:

                    public func comparableValidator<T: Comparable>(minValue : T?, maxValue : T?, value: T) -> Void {
                        if let min = minValue {
                            _assertFunc(min <= value, "\(value) must be at least \(min)")
                        }
                    
                        if let max = maxValue {
                            _assertFunc(max >= value, "\(value) must be at most \(max)")
                        }
                    }
                    

                    【讨论】:

                    【解决方案15】:

                    我能够通过在 Xcode 7.0 beta (7A120f) 中创建的全新项目简单而一致地重现这一点。请注意,问题可能比示例更广泛,但这对我来说是 100% 可重现的,只需在新项目中添加一行即可。这个问题似乎也只适用于 iOS,而不是 OS X,至少在这个例子中是这样。已向 Apple 提交错误报告 #21376523。

                    1. 在 Xcode 7.0 (7A120f) 中创建一个全新的项目。类型为“游戏”,语言为“Swift”,游戏技术为“SceneKit”。

                    2. 使用默认设置构建和运行。项目在模拟器中构建并运行良好(您将看到默认的旋转 3D 宇宙飞船模型)。

                    3. 向 GameViewController.swift 添加一个 SCNVector3 属性,如下所示:

                      class GameViewController: UIViewController {  
                        var p = SCNVector3Zero  
                      

                    --> 产生“中止陷阱:6”。项目将不再编译。

                    1. 将常量更改为空的初始值设定项。

                      class GameViewController: UIViewController {  
                        var p = SCNVector3()  
                      

                    --> 同样的问题,“中止陷阱:6”

                    1. 删除属性,恢复到干净的项目状态。

                    --> "Abort trap: 6" 消失,项目再次编译并运行。

                    1. 将“var”改为“let”。

                      class GameViewController: UIViewController {  
                        let p = SCNVector3Zero
                      

                    --> 编译并运行。

                    1. 将属性类型更改为 SCNVector4 而不是 SCNVector3。

                      class GameViewController: UIViewController {  
                        var p = SCNVector4Zero
                      

                    --> 编译并运行。

                    编辑:这个问题在 Xcode 7.0 beta-2 (7A121l) 中得到修复,如果由于使用浮点 3 向量类型(例如 SCNVector3)而得到“中止陷阱:6”。来自发行说明:

                    • 调用 C 或 Objective-C 函数时编译器崩溃 SIMD float3 参数已修复。 (21294916)

                    【讨论】:

                      【解决方案16】:

                      好的,就我而言,这是因为我有一个嵌套在泛型类中的枚举。现在,奇怪的是,当我隔离问题(到 BaseDao2 中)时,编译器告诉我正确的错误,但在我真正的 BaseDao 实现中(它有更多的东西),它抛出“陷阱 6”。

                      Type 'DaoError2' nested in generic type 'BaseDao2' is not allowed
                      

                      当我有这个时:

                      class BaseDao2<T>: InjectRestSession{
                      
                          enum DaoError2: ErrorType{
                              case FAILED_RESPONSE(String)
                              case INVALID_RESULT(String)
                              case FAIL_TO_LIST, FAIL_TO_GET
                          }
                      
                          func get() -> T?{
                              return nil
                          }
                      }
                      

                      无论如何,就我而言,我将 DaoError 移出 BaseDao 并编译了所有内容。无论如何,我的感觉是“陷阱 6”是无法编译的东西,编译器很困惑。从一个简单的案例开始,然后添加您认为可能导致问题的原因,这有助于通过获取正确的编译错误来识别问题。换句话说,你必须对 swift 编译器保持温和。

                      【讨论】:

                        【解决方案17】:

                        这就是导致我出错的原因。

                        之前:

                            for (key,value) in hash{
                                count += value.count
                            }
                        

                        之后:

                            for (_,value) in hash{
                                count += value.count
                            }
                        

                        它不喜欢钥匙从未在任何地方使用过。我不确定为什么它会导致构建失败。

                        【讨论】:

                          【解决方案18】:

                          我设法通过在目标(不是项目)设置中的“Swift 编译器 - 代码生成”菜单下将优化级别设置为“无”来构建我的项目。请看下面的截图...

                          这不应该是一个永久的解决方案,因为它会使 ipa 的大小增加一倍以上。当 Xcode 7 出测试版时,应该可以重新开启优化。

                          【讨论】:

                            【解决方案19】:

                            在我的情况下,我有带有可选方法的 @objc 协议,当我也在 swift 类中调用它的方法时,我得到了那个错误,在从协议中的函数中删除 optional 关键字后,错误就消失了。

                            之前(有错误):

                            @objc protocol SomeDelegate:NSObjectProtocol{
                            
                                optional func someDelegateMethod()
                            }
                            
                            class MySwiftClass{
                                func notifyMyDelegate(){
                                    mydelegate?.someDelegateMethod?() //this line caused the error
                                }
                            }
                            

                            之后:

                            @objc protocol SomeDelegate:NSObjectProtocol{
                            
                                func someDelegateMethod()
                            }
                            
                            class MySwiftClass{
                                func notifyMyDelegate(){
                                    mydelegate?.someDelegateMethod()
                                }
                            }
                            

                            【讨论】:

                              【解决方案20】:

                              对我来说.. 我修改了 @objc 函数的内容,如下所示:

                              之前:

                                      @objc func didConnectWithSession() {
                                         context!.stream.disconnectAfterSending()
                                      }
                              

                              之后:

                                      @objc func didConnectWithSession() {
                                         //context!.stream.disconnectAfterSending()
                                      }
                              

                              这导致了错误。我通过删除整个函数来解决。

                              【讨论】:

                                【解决方案21】:

                                在 Failable 初始化程序中使用 do-try-catch 时收到此消息:

                                public init?() {
                                    do {
                                        ...
                                        super.init(superParam: try getParamForSuper())
                                        ...
                                    } catch {
                                        ...
                                    }
                                }
                                

                                将 try 调用移动到它自己的局部变量时编译成功:

                                public init?() {
                                    do {
                                        ...
                                        let superParam = try getParamForSuper()
                                        super.init(superParam: superParam)
                                        ...
                                    } catch {
                                        ...
                                    }
                                }
                                

                                【讨论】:

                                  【解决方案22】:

                                  就我而言,我在class Aextension A 中都声明了一个private struct Constants

                                  可能它应该给出一个错误,但它没有。

                                  【讨论】:

                                    【解决方案23】:

                                    对我而言,导致此错误的原因是:

                                    我创建了一个文件来在 UIView 上创建扩展。在这个文件中,我创建了一个名为 Foo 的私有协议。

                                    然后我做了:

                                    extension UIView: Foo

                                    从协议中删除私有使错误消失。

                                    我想这可能是一个错误。编译器应该警告我们这个问题。就像它警告我们不能向类型添加私有一致性一样,它应该告诉我们一致性应该使用“公共/内部”协议。

                                    【讨论】:

                                      【解决方案24】:

                                      我通过以下步骤解决了这个问题:

                                      1. 运行 'pod deintegrate'

                                      2. 确保 podfile 像这样: 平台:ios,'8.0' 使用_frameworks!

                                      3. 运行“pod install”

                                      【讨论】:

                                        【解决方案25】:

                                        在我的情况下,重命名作为协议的 init 方法的几个参数会导致编译失败。我一个一个解决,每次修改后重新编译。

                                        【讨论】:

                                          【解决方案26】:

                                          我遇到了同样的问题,我发现问题是我在阅读了一篇关于“如何加快构建速度”的文章后将构建系统更改为“新构建系统”(这是 btw here 的文章)

                                          所以回到标准构建系统

                                          1. 要启用新的构建系统,请转到文件 → 项目设置(或工作区设置)。
                                          2. 将构建系统更改为标准构建系统

                                          希望它对某人有所帮助,不要浪费时间试图找出这不起作用的原因!

                                          【讨论】:

                                            【解决方案27】:

                                            我没有尝试其他解决方案。 我在这个设置中遇到了这个问题:

                                            func speacialAdd(_ num1: Int, to num2: Int){
                                                func specialMultiply(_ digit1: Int, with digit2: Int = num2){ // SOURCE OF PROBLEM
                                                    print(digit2)
                                                    print(digit1)
                                                }
                                            
                                                specialMultiply(5)
                                            }
                                            
                                            class ViewController: UIViewController {
                                            
                                                override func viewDidLoad() {
                                                    super.viewDidLoad()
                                                    print(speacialAdd(5, to: 6))
                                                }
                                            }
                                            

                                            这条线是问题的根源。将其默认为参数似乎不适用于嵌套函数

                                            func specialMultiply(_ digit1: Int, with digit2: Int = num2) // ERROR
                                            

                                            解决方案是:

                                            func specialMultiply(_ digit1: Int, with digit2: Int) // OK
                                            func specialMultiply(_ digit1: Int, with digit2: Int = 6) // OK
                                            

                                            FWIW 我实际上是第一次在操场上写这个,然后得到了一个不同的错误:

                                            游乐场执行失败:

                                            错误:无法查找符号:
                                            __T013__lldb_expr_111speacialAddySi_Si2totF4num2L_Sifau

                                            【讨论】:

                                              【解决方案28】:

                                              在 Xcode 9.3 中,我重新安装了特定的 pod,其中出现了警告并再次清除了派生数据。它对我有用:)

                                              【讨论】:

                                                【解决方案29】:

                                                我通过转到 Xcode -> 首选项 -> 位置 -> 将 Relative 选项设置为派生数据来修复它。

                                                【讨论】:

                                                  【解决方案30】:

                                                  对我来说是 MD5.swift 问题

                                                  你要做的就是在你的项目中搜索文件名“MD5.swift”,即使是在 pod 中

                                                  并在此处将所有内容替换为该文件

                                                  https://github.com/onmyway133/SwiftHash/blob/master/Sources/MD5.swift

                                                  【讨论】:

                                                    猜你喜欢
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    • 2014-12-20
                                                    • 2015-12-16
                                                    • 1970-01-01
                                                    • 1970-01-01
                                                    相关资源
                                                    最近更新 更多