구축 시 Swift 컴파일러 분할 오류
된 (한) 한 height
산의 UIView
내 안에UIViewExtension.swift
파일로 인해 스위프트 컴파일러가 segfault...여기서 무엇이 잘못되고 있는 것일까요?
0 swift 0x00000001061e5608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x00000001061e5af4 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff894da5aa _sigtramp + 26
3 libsystem_platform.dylib 0xb03939841e997c88 _sigtramp + 2504775416
4 swift 0x00000001064c8bb9 swift::NominalTypeDecl::getMembers(bool) const + 41
5 swift 0x00000001055efab9 swift::irgen::ClassMetadataLayout<(anonymous namespace)::FindClassMethodIndex>::addClassMembers(swift::ClassDecl*) + 329
6 swift 0x00000001055e97b2 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>, swift::ResilienceExpansion) + 434
7 swift 0x00000001056550d3 swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 42611
8 swift 0x000000010564a266 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8678
9 swift 0x00000001055cb6f8 swift::irgen::IRGenModule::emitGlobalTopLevel() + 184
10 swift 0x00000001056376e3 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1859
11 swift 0x0000000105638033 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 51
12 swift 0x00000001055aa65a frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4842
13 swift 0x00000001055a935d main + 1533
14 libdyld.dylib 0x00007fff8a82e5fd start + 1
1. While emitting IR SIL function @_TFCSo6UIViewg6heightSd for 'anonname=0x7ff422892fd0' at <path redacted>/UIViewExtension.swift:60:5
<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)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
이 문제를 해결하기 위해 더 많은 정보가 필요하다면 댓글을 달기만 하면 됩니다.감사합니다!
편집:
여기 이 문제의 컴파일러 오류를 반환하는 관련 .xcode proj가 있습니다.여기서 다운로드
이 작업을 수행하는 중이어서 이 오류가 발생했습니다.
if(currentMeal?.State == .Deleted){
}
대신에
if(currentMeal!.State == .Deleted){
}
따라서 조건이 이 오류를 유발할 수 있다면 선택사항은 포장을 뜯지 않은 것으로 생각합니다.
스위프트에서 컴파일러 segfault를 만났을 때, 당신은 편리한 라인 번호와 에러 메시지를 받지 못합니다.다음은 문제를 추적하는 방법입니다.
- 이라는 새 .
SegFaultDebugger.swift
당신의 프로젝트에서. - 이 새 파일에서 문제를 일으키는 클래스의 확장자를 정의합니다.
- 에서 합니다.
SegFaultDebugger.swift
. - 컴파일.
이 시점에서 세 가지 중 하나가 발생합니다.
- 원본 파일에서 여전히 segfault가 발생합니다: 메서드를 다음에서 이동합니다.
SegFaultDebugger.swift
다른 합니다.SegFaultDebugger.swift
합니다. - 다음에서 세그파트를 받습니다: 좋아요!이제 이진 검색을 사용하여 segfault의 원인을 파악할 수 있을 때까지 특정 방법으로 고정합니다.
- 의미있는 컴파일러 오류가 발생합니다. 좋습니다!오류를 수정합니다.모든 것이 컴파일되면 메소드를 원래 파일로 다시 이동합니다.
프로토콜 중 하나를 확장하는 동안 오류가 발생하여 잘못된 형식 및 선택 형식 인수를 입력했습니다.
protocol SomeProtocolName: class {
var someProtocolVariable: String { get set }
func someProtocolFunction(someProtocolVariable: String)
}
// MARK:
extension SomeProtocolName {
func someProtocolFunction(someProtocolVariable: String?) {
self.someProtocolVariable = someProtocolVariable
}
}
String
e로String?
확장으로 인해 세그먼트 단층 11이 발생했습니다.
Xcode 7에서 Debug Navigator의 오류를 클릭하면 충돌을 확대하여 볼 수 있습니다.오른쪽에 있는 햄버거 버튼을 클릭하면 오류가 확대되고, 확대된 오류 메시지 하단까지 스크롤하면 어디에서 왔는지 알 수 있습니다.
저는 그 중 두 개의 분할 오류가 있었습니다.위 사진에서 첫 번째는 쓰러졌을 때의 모습이고, 두 번째는 햄버거 버튼을 펼쳤을 때의 모습입니다.확장된 회색 상자의 맨 아래에 컴파일러가 충돌한 위치를 알려주는 메시지가 나타납니다.
그러나 오류 메시지가 정보를 충분히 제공하지 못할 수도 있기 때문에 어디에서 충돌했는지는 알려주지만 항상 이유와 해결 방법을 알려주는 것은 아닙니다.이 오류를 제거하는 것은 여전히 추측의 문제입니다.
저도 이런 오류가 있어서 이렇게 고쳤습니다.
프로젝트를 확인하고 어떤 파일이 두 번 사용되었는지 알아보고 하나를 제거하거나 모두 삭제하고 다시 추가합니다.
내 X코드의 오류:
:0: 오류: 파일 이름 "AttributedString.swift"가 두 번 사용되었습니다. '/Users/.../CNJOB/CNJOB/AttributedString.swift' 및 '/Users/.../CNJOB/CNJOB/AttributedString.swift'
:0: 참고: 파일 이름은 이름이 같은 비공개 선언을 구분하는 데 사용됩니다.
:0: 오류: 파일 이름 "APIClient.swift"가 두 번 사용되었습니다. '/Users/.../CNJOB/CNJOB/APIClient.swift' 및 '/사용자/.../CNJOB/CNJOB/APIC 클라이언트.swift'
:0: 참고: 파일 이름은 이름이 같은 비공개 선언을 구분하는 데 사용됩니다.
명령/어플리케이션/Xcode 3.app/컨텐츠/개발자/툴체인/XcodeDefault.xctoolchain/usr/bin/swifttc가 종료 코드 1과 함께 실패했습니다.
향후 Xcode/Swift 빌드에서 문제가 해결될 때까지 간단한 해결 방법을 찾았습니다.
- 모든 확장자를 만 하면 됩니다.
.swift
사용 중인 파일입니다.
제공하신 예제 프로젝트에 다음의 내용을 배치합니다. UIViewExtension.swift
그리고. CALayerExtension.swift
위에 AppDelegate.swift
문제가 해결될 때까지 스위프트 코드를 작성할 수 있기를 바랍니다.
를 추가합니다.private
적 var돌:
private static var taskId = 0
다음과 같은 문장에 대해 컴파일러 분할 오류가 있었습니다.
someFunction(isFlagged ? "String1" : "String2")
제가 대신 다른 진술을 해봤는데 효과가 있네요.
이것은 일반적으로 컴파일러가 문장 또는 문장 내 변수의 상태를 보장/결정하기에 충분한 정보를 가지고 있지 않을 때 발생합니다.
예를 들어, [String:[String] 도시 이름을 키로 채우고 쉼표로 구분된 우편 번호/우편 번호 목록으로 채웁니다.
코드 어딘가에서 해당 코드 목록을 업데이트하고 싶다고 생각해 보십시오.
myDict[town] += newZipCode + ","
이 오류를 town
사전에 없을 수 있으므로 위 문에 유효한 값이 있는지 보장할 수 없습니다.
이 의 .myDict[town]
다의 할 수 .key not in dict
그런 다음 지정된 키의 값을 업데이트합니다.
myDict[town] = guaranteedValue + "," newZipCode + ","
불행히도 근본 원인을 파악하는 것이 항상 간단하지는 않으므로 이 간단한 예가 도움이 되기를 바랍니다.
포장되지 않은 Bool을 속성으로 사용하여 상태를 선언하는 경우에도 이 문제가 발생할 수 있습니다.
저의 경우 문자열 보간 중에 위치가 잘못된 결장이 제 것을 부러뜨렸습니다(XCode 6.1.1).
예:
println("\(value1:value2)")
내가 하려고 했을 때:
println("\(value1) : \(value2)")
부모 클래스의 약한 변수를 무시하려고 할 때 이 오류가 발생했습니다.
기본 클래스에서:
weak var stripeViewDelegate : StripeViewDelegate? = nil
파생 클래스:
override weak var stripeViewDelegate : StripeViewDelegate? = nil {
didSet {
self.stripeView.delegate = stripeViewDelegate
}
를 할 때 .=nil
계급
오늘은 예외가 있습니다.
class func createByAny(instance: Any?) -> ApiCollectionResponse { ... }
이로써 해결할 수 있었습니다.
class func createByAny(instance: Any) -> ApiCollectionResponse { ... }
"Any" 유형은 모든 유형의 이벤트 "nil", "AnyObject", 선택 사항이기 때문에, ... :) 선택 사항이 아니며, 이미 선택 사항입니다.
typealias Any = protocol<>
이 오류는 이름과 일치하는 유형을 가진 변수를 실수로 선언하는 경우에도 발생합니다.
var sectionGroup: sectionGroup? { ... }
연산자 함수에 대한 관련 없는 일반 형식 때문에 이 오류가 발생했습니다.
func ==<T>(lhs: Foo, rhs: Foo) -> Bool {
return lhs.bar == rhs.bar
}
제 경우에는 제거하는 것이<T>
문제를 해결했습니다.
가 를 했습니다.struct
안에func
중...struct
수업 수준으로 문제를 해결했습니다.
합니다에 .struct
에서 안에func
그전에이 높아진 가 다른 이었습니다.segmentation fault(스위프트 1.2 베타로 악명이 높아진 것처럼 보이는)가 아닌 다른 것이었습니다.세상에 애플, 거기서 뭐해요?
나의 경우, 변수에 클래스 이름을 사용하기 때문에 이 오류가 발생합니다.
var MYClass : MYClass {
get {
return.....
}
}
그리고 이것이 내 문제를 해결해 줍니다.
var myClass : MYClass {
get {
return.....
}
}
제 경우에는 프로토콜에서 정적 초기화를 잘못했을 때 발생했습니다.저는 우회할 방법을 찾았지만 컴파일러는 빌드하는 동안 절대로 분할 오류를 생성해서는 안 됩니다.
세 개의 파일이 관련되어 있습니다.NamedSegues.swift라는 프로토콜, 콜백을 포함하는 프로토콜을 구현하는 사용자 지정 TableViewController, 콜백을 호출하기 위해 이 프로토콜에 대한 참조를 유지하는 사용자 지정 TableViewCell.
//file1
import Foundation
protocol NamedSegues {
func executeSegueWithId(id: String) -> Void
static func getDefault() -> NamedSegues // This was required because of init requirement in CustomCellView
}
//file2
class CustomController: UITableViewController, NamedSegues {
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellID", forIndexPath: indexPath ) as! CustomCellView
// Configure the cell...
//App logic...
cell.parent = self
}
//Mark: NamedSegues
func executeSegueWithId(id: String) ->() {
NSLog("Received callback to execute segue: \(id)")
//
}
static func getDefault() -> NamedSegues { // I think this must be where it threw up.
return self as! NamedSegues
}
}
//file3
import UIKit
class CustomCellView: UITableViewCell {
var id: String = "NoName"
var parent: NamedSegues = NamedSegues.getDefault() // This is where it was needed.
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
NSLog("Touched id: \(id)")
parent.executeSegueWithId(id) // This is where parent was used.
}
}
내가 그걸 이용해서 해결했다고요?
프로토콜 파일에서 file1: delete of getDefault() 선언을 삭제합니다. CustomController file2: delete of getDefault.CustomCellView에서 file3:
var parent: NamedSegues?
...
parent?.executeSegueWithId(id)
컴파일러는 빌드하는 동안 세그먼트화 오류를 표시하지 않고 이를 감지하여 오류 메시지를 표시했어야 합니다!
스위프트 2 컴파일러가 프라임타임을 맞이할 준비가 되지 않은 것 같습니다!이 될 있었습니다:, 우,다: 11서,에서,PFQuery.query.findObjectsInBackgroundWithBlock
.
이 문제에 대한 자세한 내용은 https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/280 에서 확인할 수 있습니다.
@Fjohn이 말했듯이, 이것은 저를 위한 옵션의 포장을 푸는 것과 관련된 문제였습니다. (Xcode 7.0 베타 6과 Xcode 7 모두에서 깨졌습니다.)제 경우에는 옵션의 포장을 뜯지 않았습니다. (제게 귀띔해 준 것은 두 배였습니까?)설명자에iflet이 문제를 해결한 경우 사용
다른 사람들이 위에 기술한 바와 같이, 프로토콜을 통해 확장을 사용하고 있지만 프로토콜의 메서드 서명이 확장의 구현과 일치하지 않을 때 이러한 일이 발생했습니다.
제 경우에는 (확장에서) 구현에 새로운 파라미터를 추가했지만 프로토콜에서 메서드의 서명에 추가하는 것도 잊었습니다.
저의 경우에는 가변 파라미터 뒤에 함수 파라미터를 추가하려고 했습니다.
매개 변수 시퀀스를 반전시켜 매개 변수 목록의 마지막 매개 변수로 설정하면 이를 수정할 수 있습니다.
Swift 3.0(Xcode 8.1)은 프로토콜이 선택 변수를 선언하고 구현자가 해당 변수를 게으른 초기화 변수로 구현하는 경우 이 문제를 보여줍니다.
여기에 버그가 보고되었습니다: https://bugs.swift.org/browse/SR-1825
Xcode 8.2.
@nonobjc
프로토콜을 확장으로 구현하여 분할 오류를 발생시킵니다.e@nonobjc
프로토콜 구현을 클래스 구현으로 전환합니다.
제 경우 범인이 실수로 함수에 과부하를 걸면서 가변 인수를 가진 함수와 배열 인수를 예상했습니다.
public required init(_ args: Node...) {
}
슈퍼클래스가 배열로 정의되었을 때:
public required init(_ args: [Node]) {
}
과 같이 segfault 하였습니다를 하는 하였습니다.type
입니다.
switch type {
case .aType:
// Do Something
default:
break
}
이로써 해결할 수 있었습니다.
switch type {
case .Some(.aType):
// Do Something
default:
break
}
사용자 지정 UITableViewController에서 다음 메서드 서명으로 이 오류가 발생했습니다.
func filterContentForSearchText(searchText: String)
다음으로 변경:
func filterContentForSearchText(searchText: String!)
문제를 고쳤습니다.
제가 연장해서 똑같은 문제가 생겼습니다.제 확장에는 두 가지 편리한 이니셜라이제이션이 있었습니다.
convenience init(context: NSManagedObjectContext) {
let entityDescription = NSEntityDescription.entityForName("PropertyEntity", inManagedObjectContext: context)!
self.init(entity: entityDescription, insertIntoManagedObjectContext: context)
}
convenience init(dictionary: NSDictionary, context: NSManagedObjectContext) {
self.init(context: context)
property1 = (dictionary["key"] as? String) ?? ""
// More properties...
}
오류를 제거하기 위해 인스턴스 메소드 맵(사전: NSDictionary)을 추가하여 segmentation fault 오류가 사라졌습니다.
convenience init(dictionary: NSDictionary, context: NSManagedObjectContext) {
self.init(context: context)
map(dictionary)
}
저에게 있어서 문제는 제 아키텍처가 표준으로 설정되지 않는 것입니다.나는 i386 같은 것을 추가했고, 그냥 그것을 기본 xcode 프로젝트 arch로 다시 설정했고 그것은 잘 컴파일되었습니다.
저도 신속한 프로젝트에서 같은 문제를 겪었습니다.문제는 개체를 반환해야 하지만 반환되지 않는 함수였습니다.이러한 오류는 Obj-C로 편집할 때 신호를 보내곤 했습니다.스위프트에서는 그렇지 않은 것 같습니다.
언급URL : https://stackoverflow.com/questions/24222644/swift-compiler-segmentation-fault-when-building
'programing' 카테고리의 다른 글
반복하는 동안 Python dict 수정 (0) | 2023.10.20 |
---|---|
jQuery에 전역 값(반드시 전역 변수가 아님)을 저장하는 방법? (0) | 2023.10.20 |
IHtpActionResult를 사용할 때 사용자 지정 헤더를 설정하는 방법은? (0) | 2023.10.15 |
엔티티가 있는 xml에서 MySQL ExtractValue() (0) | 2023.10.15 |
워드프레스 태그를 프로그래밍적으로 만들려면 어떻게 해야 합니까? (0) | 2023.10.15 |