由于信号,命令失败:中止陷阱: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<UITouch>, withEvent event: UIEvent!?)
更改为override func touchesBegan(touches: Set<UITouch>, 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 A
和extension 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的主要内容,如果未能解决你的问题,请参考以下文章