由于信号,命令失败:中止陷阱:6

Posted

技术标签:

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

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

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

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

项目设置:

目标设置:

【问题讨论】:

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

【讨论】:

你是怎么找到的? @Aymenworks 我发现了这个:github.com/tptee/Dollar.swift/commit/…【参考方案15】:

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

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

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

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

    class GameViewController: UIViewController   
      var p = SCNVector3Zero  
    

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

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

    class GameViewController: UIViewController   
      var p = SCNVector3()  
    

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

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

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

    将“var”改为“let”。

    class GameViewController: UIViewController   
      let p = SCNVector3Zero
    

--> 编译并运行。

    将属性类型更改为 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】:

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

    运行 'pod deintegrate'

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

    运行“pod install”

【讨论】:

【参考方案25】:

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

【讨论】:

【参考方案26】:

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

所以回到标准构建系统

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

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

【讨论】:

【参考方案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

【讨论】:

以上是关于由于信号,命令失败:中止陷阱:6的主要内容,如果未能解决你的问题,请参考以下文章

中止陷阱:strncat() 出现 6 个错误

C中的“中止陷阱:6”错误?

C中的中止陷阱6错误

使用 memset() 获取“中止陷阱 6”

中止陷阱错误:6 - 它来自哪里? - 数独求解器

中止陷阱:C 程序中的 6 个