无法执行命令:分段错误:11,由于信号而导致Swift前端命令失败(使用-v查看调用)。

45

我有一个 iOS swift 程序,在 Xcode Beta2 上编译和运行都很好。当我下载了 beta4 版本后,出现了一些新的 Swift 语言的语法错误,我进行了更正。现在我遇到了这个错误:

<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)

问题在于它没有告诉我错误的位置,以便我可以进一步进行故障排查。我在哪里可以输入“-v”以便“看到调用”并进行更深入的故障排除?如果没有这个,就绝对无法找出问题。提前致谢。


6
与删除代码和添加代码一起玩乐 - Bryan Chen
1
这是一种蛮力解决问题的方式 :p 有没有想法在哪里输入 -v 来查看调用?也许那能帮到。 - Salman Hasrat Khan
2
当编译器崩溃时,您可以通过在Xcode中展开消息来查看堆栈跟踪。这是您能从中获取的全部信息。 - Bryan Chen
可能是 Swift 编译器在构建时出现分段错误 的重复问题。 - Bill
在Xcode8中,这可能会有所帮助:https://dev59.com/SlwY5IYBdhLWcg3waXO5?answertab=active#tab-top - technerd
显示剩余5条评论
22个回答

42

以下是我如何找出问题所在的步骤:

  1. 点击问题导航器中的问题(⌘ + 4,然后单击以红色!开头的行)
  2. 在出现的文件底部,应该有一行类似于以下内容的语句:

1. While emitting IR SIL function @_TToZFC4Down8Resource12getInstancesfMS0_U__FTSS6paramsGVSs10DictionarySSPSs9AnyObject__9onSuccessGSqFGSaQ__T__7onErrorGSqFT5errorCSo7NSError8responseGSqCSo17NSHTTPURLResponse__T___T_ for 'getInstances' at /path/to/file.swift:112:5

  1. 您的错误发生位置是该行末尾。(在本例中,在文件.swift中的第112行 getInstances)。

谢谢。这给了我一个线索。 - fnc12
这真的很有帮助,可以找出从哪里开始。 - jervine10
这是寻找错误真正原因的正确答案。谢谢。 - rmvz3

21

我试图将PayPal框架添加到我的iOS项目中(Xcode 7.2和Objective-C语言)。在构建时没有出现任何错误,但当我尝试归档该项目并创建IPA文件时,出现了以下错误:

无法执行命令:Segmentation fault: 11

截图如下:

enter image description here

经过长时间的努力,我在项目的目标 > 构建设置 > 启用Bitcode 中禁用了Bitcode。现在该项目可以被归档。请查看以下截图。

enter image description here


1
这对我来说绝对是正确的答案,我建议每个人都试一试。 - Damon Yuan
这解决了我的问题。我能够构建但无法存档。这个信息的小贴士救了我的一天。谢谢。 - Krishna Vedula
非常感谢您,您救了我的一天!这会有其他影响吗? - mcfly soft
不,我已经有使用那段代码的应用程序了。顺便说一下,如果这个答案对你有帮助,请将其标记为被接受的答案。 - Manab Kumar Mal
我把它设为“否”,然后改成了“是” - 尝试构建但失败了,又改回“否” - 然后成功构建了。 - Ronen Rabinovici

8

对于这个问题,我无法提供一个直接的解决方案(虽然我相信这是苹果的一个bug),但我刚好遇到了完全相同的错误信息并且成功地解决了。下面是我做的:

一般情况

  1. 注释掉最近更改的Swift代码(检查提交),直到应用程序再次编译
  2. 通过命令点击在失败行中调用的每个方法,并检查是否存在歧义

我的例子

在我的情况下(我正在使用用Objective-C编写的XMPPFramework),失败的代码看起来像这样:

for roomMessage: XMPPRoomMessage in self.messages {
    let slices = split(roomMessage.nickname(), { $0 == "_" }, allowEmptySlices: false)
}

一旦我使用"0_test"替换了roomMessage.nickname(),代码就不再失败。所以我命令点击方法nickname()(两次),这就是我看到的:enter image description here 我猜想Swift 1.1编译器在无法确定对象的确切类型时有问题,因此我明确指定了roomMessage的类型,然后出现了另一个错误,我通过删除nickname()方法调用后面的括号来修复它。这使得我的应用程序再次构建。下面是可行的代码:
for roomMessage: XMPPRoomMessageCoreDataStorageObject in self.messages {
    let slices = split(roomMessage.nickname, { $0 == "_" }, allowEmptySlices: false)
}

我希望这篇文章能帮助有需要的人更快速地调查问题,比我之前做的更有效。


8

我也遇到了同样的问题,

  1. 当我清理派生数据时
  2. 同时从回收站中删除所有已删除的派生数据。
  3. 停止 Xcode,重新启动它并进行清理构建

现在应该已经修复了。


2
我只需要删除派生数据(步骤1),问题就解决了。 - Doug Amos
2
太好了。我在Xcode 10.0中遇到了这个问题,即使是“清理构建文件夹...”也无法解决它。 - Rivera
1
重启对我没用,但这个方法有效!非常感谢。 - nwyyy

4

当我调用相同协议扩展中的协议函数时,出现了分段错误。

我的代码类似于以下内容:

protocol Rotatable {
    func rotate() -> Self
}

extension Rotatable {
    func rotate(steps: Int) {
        for _ 0..<steps { self.rotate() }
    }
}

当我后来创建了一个对象并声明它将遵循Rotatable协议时,我遇到了Segmentation fault 11错误,程序崩溃。
例如:这会导致Segmentation fault并使Xcode崩溃。
struct SomeStruct : Rotatable {

}

如果我先在 SomeStruct 中实现了 rotate() 函数,然后声明其符合 Rotatable 规范,那么就不会出现问题。

嗨,我在Xcode 11中遇到了同样的问题,似乎是由于一个我在古老库中使用的协议引起的。 你是怎么做到的? 我应该如何实现这个函数?谢谢! - Dasoga

4
在我的情况下,这个错误是因为我使用类名作为变量名。
var MYClass : MYClass {
    get {
        return.....
    }
}

这解决了我的问题。

var myClass : MYClass {
    get {
        return.....
    }
}

4

我的问题是,我尝试使用所谓的模块化方法(Module设计模式)来模仿静态变量。因此,我有像这样的东西(只是在Swift文件级别声明了一个简单的静态参考操作队列):

let globalQueue: NSOperationQueue = {
    let queue = NSOperationQueue()
    queue.suspended = false
    queue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount
    return queue
}()

在Xcode 6.x.x中这个方法可以正常编译,但在Xcode 7beta中无法通过编译。我只是想让你们知道这一点。 P.S.总的来说,我从日志中找出了问题所在(请见附图)。希望这能节省您的时间。 enter image description here


感谢您提供了一份指导他人寻找错误的答案。 - Zoltán

1

我因为一个愚蠢的错误而遇到了这个错误!!

在我定义的一个类中

var url: String!?

看起来这个描述是多个和通用的错误的原因!!


:) -> 笑脸 - אורי orihpt

1
我今天遇到了类似的问题,尝试了这里描述的步骤,包括删除我最近修改过的文件。但是似乎没有起作用。我尝试了在Xcode中SourceKit崩溃时建议的方法。我进入了派生数据目录并删除了所有内容。该位置在“首选项->位置->派生数据”下列出。路径旁边有一个箭头图标,单击该图标可打开Finder并选择该目录。选择其中所有目录并将其删除。关闭Xcode并重新打开它。这使我的问题消失了。我认为某些中间文件已损坏,编译器不知道如何处理它。

1

如果你将Objective-C代码移植到Swift,并将Objective-C协议转移到Swift中,也可能会出现这种情况。如果在协议定义中省略了 @objc,而你仍然有使用该协议的Objective-C代码,你就会遇到此错误。

解决方法是在协议上添加 @objc。

protocol MyPortedProtocol {}

更新为

@obcj protocol MyPortedProtocol {}

同时确保任何实现该协议的类在方法前添加 @objc 标记


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接