无法执行命令:分段错误:11 swift frontend command failed due to signal(使用 -v 查看调用)
Posted
技术标签:
【中文标题】无法执行命令:分段错误:11 swift frontend command failed due to signal(使用 -v 查看调用)【英文标题】:unable to execute command: Segmentation fault: 11 swift frontend command failed due to signal (use -v to see invocation) 【发布时间】:2014-09-20 09:05:58 【问题描述】:我有一个 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 以“查看调用”并进一步排除故障?没有这个,就绝对没有办法找出问题所在。提前致谢。
【问题讨论】:
玩得开心删除代码并将它们添加回来 我不确定你的意思... 删除代码直到它再次工作。他们添加代码,直到它被破坏。现在您找到了错误的根源。 这是解决问题的蛮力方法 :p 关于在哪里键入 -v 以查看调用的任何想法?也许这可以帮助 您应该能够通过在 Xcode 中展开消息来查看编译器崩溃时的堆栈跟踪。这就是你能从中得到的一切。 【参考方案1】:我在从 beta2 切换到 beta4 时遇到了类似的问题。
干净
然后
构建
【讨论】:
恕我直言,一个有经验的人总是在在 *** 上提问之前尝试清理他的项目。如果提出问题,解决问题并非易事。 相反,我经常忽略最简单(且正确)的解决方案,因为它们就是这么简单。【参考方案2】:如果您将 Objective-C 代码移植到 Swift,并且将 Objective-C 协议迁移到 Swift,也会发生这种情况。如果您在协议定义中省略了@objc,并且仍然有使用该协议的 Objective-C 代码,则可能会出现此错误。
这种情况下的解决方案是将@objc 添加到协议中
protocol MyPortedProtocol
更改为
@obcj protocol MyPortedProtocol
还要确保任何实现此协议的类都将@objc 添加到方法中
【讨论】:
【参考方案3】:Swift 5 非常简单流畅的解决方案
1- Just check your last added Extension / Code / Folder File before then this issue occur
2- Just Commit the code or save that code
3- Clean and Build & DONE :-)
Happy Coding
【讨论】:
【参考方案4】:我在构建一些不适合最新 Swift 版本的遗留代码时遇到了这个问题。
Segmentation fault: 11
当您打开 Report navigator
时,它包含一些上下文,例如:
1. Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)
2. While evaluating request IRGenSourceFileRequest(IR Generation for file "/Users/alex/Downloads/NSURLProtocolExample-Swift_complete/NSURLProtocolExample/AppDelegate.swift")
3. While emitting IR SIL function "@$s20NSURLProtocolExample11AppDelegateC11applicationAD29didFinishLaunchingWithOptionsSbSo13UIApplicationC_So12NSDictionaryCSgtF".
for 'application(application:didFinishLaunchingWithOptions:)' (at /Users/alex/Downloads/NSURLProtocolExample-Swift_complete/NSURLProtocolExample/AppDelegate.swift:17:3)
0 swift 0x000000010b2d3615 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1 swift 0x000000010b2d2615 llvm::sys::RunSignalHandlers() + 85
2 swift 0x000000010b2d3bcf SignalHandler(int) + 111
3 libsystem_platform.dylib 0x00007fff2039bd7d _sigtramp + 29
...
解决这个问题:
-
评论指出的行(AppDelegate.swift 中的第 17 行)
构建并修复所有其他问题
从第 1 步取消注释行
【讨论】:
【参考方案5】:愚蠢的错误。我在 Class 方法中引用了 self:
public class func FunctionName() -> UIImage
let bundle = Bundle.init(for: type(of: self))
...
【讨论】:
【参考方案6】:对我来说,这类似于@LuisCien 在这个答案https://***.com/a/42803582/4075379 中描述的内容
我没有任何泛型或@objc
标签,但正是这些代码行导致了分段错误:
public extension CGFloat
/// Whether this number is between `other - tolerance` and `other + tolerance`
func isEqual(to other: CGFloat, tolerance: CGFloat) -> Bool
return (other - tolerance...other + tolerance).contains(self)
即主要是 Objective-C 主要类型的扩展? 非常幸运的是,我能够删除这些行,因为该项目不再使用。这解决了问题。
【讨论】:
【参考方案7】:在我的情况下,这是因为函数参数中的 inout
不合适。所以我建议你也去寻找它。
【讨论】:
【参考方案8】:我的问题在于方法签名:
func setCategory(categoryId: Int?, subcategoryId: Int?) -> FilterSettings
func changeCategory(categoryId: Int?, subcategoryId: Int?, handler: @escaping (Int) -> ())
我不明白为什么编译器不能处理这样的声明。
【讨论】:
【参考方案9】:我也遇到了同样的问题,
-
当我清理派生数据时
同时从垃圾箱中删除所有已删除的派生数据。
停止
Xcode
,重新启动它并清理构建
现在应该修复了。
【讨论】:
我只需要删除派生数据(第 1 步),它就为我解决了这个问题。 太棒了。 Xcode 10.0 有这个问题,甚至“清理构建文件夹...”都无法解决。 重启对我不起作用,但这有效!非常感谢。【参考方案10】:对我来说,问题在于混合Generics
、Extensions
和@objc
。
事实证明 Xcode 不喜欢在泛型类的扩展中包含 @objc
:
class FaultyClass<T: TypeValidator>: UIControl where T.ItemType == String
extension FaultyClass: UITextFieldDelegate
func textFieldDidEndEditing(_ textField: UITextField)
上面的代码给出了错误@objc is not supported within extensions of generic classes
。所以我将方法移到了类本身,但没有删除空扩展名。这消除了错误,但是当我编译项目时,我得到了 segmentation fault。
解决方案是将UITextFieldDelegate
移动到类声明中。
class GoodClass: <T: TypeValidator>: UIControl, UITextFieldDelegate where T.ItemType == String
// MARK: - TextFieldDelegate
func textFieldDidEndEditing(_ textField: UITextField)
【讨论】:
【参考方案11】:我试图将 PayPal 框架添加到我的 iOS 项目(Xcode 7.2 和 Objective C 语言)。构建它时没有抛出任何错误,但是当我尝试归档项目并制作 IPA 时,我收到了该错误
无法执行命令:分段错误:11
截图:
苦苦挣扎了很久,我禁用了Project's Target > Build Settings > Enable Bitcode
中的Bitcode。现在可以归档项目了。请检查以下屏幕截图。
【讨论】:
这对我来说绝对是正确的答案,我建议大家尝试一下。 这解决了我的问题。我能够构建但不能存档。这条信息块拯救了我的一天。谢谢 非常感谢。你救了我的一天!这会有其他影响吗? 不,我已经有使用该代码的实时应用程序。顺便说一句,如果该答案对您有帮助,请将其作为已接受的答案。 我设置为“否”,所以我切换到“是” - 尝试构建但失败,切换回“否” - 构建成功。【参考方案12】:因为线路,我得到了这个错误
self.textView.inputAccessoryView = self.toolbarItems;
如果你删除它,错误就会消失。
我的步骤: 1)
-
已删除派生数据
清除构建文件夹没有帮助
将类文件复制到另一个文件夹作为备份,并注释了该类中的所有内容。错误消失了。
将代码块一一注释,直到
构建成功。
【讨论】:
【参考方案13】:当我用相同的协议扩展调用协议函数时,我遇到了分段错误。
我有一个与此相符的代码:
protocol Rotatable
func rotate() -> Self
extension Rotatable
func rotate(steps: Int)
for _ 0..<steps self.rotate()
当我后来创建一个对象并声明它将遵循可旋转协议时,我得到了分段错误 11,程序崩溃了。
例如:这会导致分段错误和 Xcode 崩溃
struct SomeStruct : Rotatable
如果我首先在 SomeStruct 中实现函数 rotate(),然后声明它符合 Rotatable 那里没有问题。
【讨论】:
您好,我在 Xcode 11 中遇到了同样的问题,并且似乎使用了旧库中的协议。你是怎么做到的?如何实现该功能?谢谢!【参考方案14】:我忘记在.m
文件中的@implementation
之后添加一个@end
,其中包含多个classes
。比如:
@implementation Adjust
@end
@implementation Data //@end For this class was missing
@implementation Create
@end
【讨论】:
【参考方案15】:我的问题是我试图用所谓的模块方法(模块设计模式)来模仿静态变量。所以,我有类似的东西(只是对在 swift 文件级别声明的操作队列的简单静态引用):
let globalQueue: NSOperationQueue =
let queue = NSOperationQueue()
queue.suspended = false
queue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount
return queue
()
所以,这在 Xcode 6.x.x 中运行良好,但在 Xcode 7beta 中停止编译。只是想让你们意识到这一点。 附言总的来说,我设法从 日志 中找出了出了什么问题(参见随附的屏幕截图)。 希望这可以为您节省一些时间。
【讨论】:
感谢您提供的答案,指导其他人在哪里寻找错误。【参考方案16】:我收到这个错误是因为一个愚蠢的错误!!
在我定义的类中
var url: String!?
:)
因此,由于很多原因,这个描述似乎是一个多重通用错误!
【讨论】:
【参考方案17】:以下是我找出问题所在的方法:
-
在问题导航器中单击问题(⌘ + 4,然后单击开头带有红色 ! 的行)
在出现的文件底部,应该有一行内容如下:
1. While emitting IR SIL function @_TToZFC4Down8Resource12getInstancesfMS0_U__FTSS6paramsGVSs10DictionarySSPSs9AnyObject__9onSuccessGSqFGSaQ__T__7onErrorGSqFT5errorCSo7NSError8responseGSqCSo17NSHTTPURLResponse__T___T_ for 'getInstances' at /path/to/file.swift:112:5
-
发生错误的位置在该行的末尾。 (在这种情况下,在
getInstances
中 file.swift 的第 112 行)。
【讨论】:
谢谢。这给了我一个线索 这对找出从哪里开始很有帮助 这是搜索错误真正原因的正确答案。坦克【参考方案18】:对我来说,这是由于将 swift 文件添加到不同的目标(在我的情况下为今天的扩展)造成的。
【讨论】:
【参考方案19】:在我的例子中,这个错误是因为我使用类名作为变量
var MYClass : MYClass
get
return.....
这解决了我的问题
var myClass : MYClass
get
return.....
【讨论】:
【参考方案20】:我今天遇到了类似情况,并尝试了此处描述的步骤,包括删除我最近修改过的文件。似乎没有任何效果。当 SourceKit 在 Xcode 中崩溃时,我尝试了一些建议。
我当进入派生数据目录并删除了所有内容。该位置列在“首选项 - > 位置 - > 派生数据”下 路径旁边有一个箭头图标,可以打开 finder 并选择该目录。选择里面的所有目录并删除它们。关闭 Xcode 并重新打开它。这让我的问题消失了。
我认为某些中间文件已损坏,编译器不知道如何处理它。
【讨论】:
【参考方案21】:无法对此给出直接的解决方案(尽管我确信这是 Apple 的错误),但我只是遇到了完全相同的错误消息并碰巧解决了它。这是我所做的:
一般情况
-
注释掉最近更改的 Swift 代码(检查提交),直到应用再次编译
按住 Command 键并单击失败行中的每个调用方法并检查是否存在歧义
我的例子
就我而言(我使用的是用 Objective-C 编写的 XMPPFramework),失败的代码如下所示:
for roomMessage: XMPPRoomMessage in self.messages
let slices = split(roomMessage.nickname(), $0 == "_" , allowEmptySlices: false)
一旦我用"0_test"
替换了roomMessage.nickname()
,代码就不再失败了。所以我命令单击方法nickname()
(两次),这是我看到的:
我的猜测是,如果对象的确切类型不明确,Swift 1.1 编译器在确定调用哪个方法方面存在问题。所以我创建了 roomMessage
显式类型 并得到了另一个错误,我通过删除 nickname()
方法调用后面的大括号来修复它。 这让我的应用再次构建。这是工作代码:
for roomMessage: XMPPRoomMessageCoreDataStorageObject in self.messages
let slices = split(roomMessage.nickname, $0 == "_" , allowEmptySlices: false)
我希望这可以帮助人们比我更快地调查问题。
【讨论】:
【参考方案22】:我确实在“Swift compiler segmentation fault when building”中回答了
我也遇到了这个错误,我是这样修复的:
检查您的项目,找出哪些文件使用了两次,然后删除一个,或者全部删除并重新添加。
我的 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: 注意:文件名用于区分同名的私有声明
命令 /Applications/Xcode 3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc 失败,退出代码为 1
【讨论】:
以上是关于无法执行命令:分段错误:11 swift frontend command failed due to signal(使用 -v 查看调用)的主要内容,如果未能解决你的问题,请参考以下文章
Swift 编译器错误,由于信号导致命令失败:分段错误:11