我刚刚升级到Swift 1.2,当我尝试使用Release方案编译iOS应用程序时,我收到了一个"分段错误:11"。
0 swift 0x00000001105a9a08 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x00000001105a9ee4 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff9a724f1a _sigtramp + 26
3 libsystem_platform.dylib 0x00007fff4fd6f6b0 _sigtramp + 3043272624
4 swift 0x00000001100e837a (anonymous namespace)::DCE::markControllingTerminatorsLive(swift::SILBasicBlock*) + 346
5 swift 0x00000001100e8109 (anonymous namespace)::DCE::markValueLive(swift::ValueBase*) + 201
6 swift 0x00000001100e791f (anonymous namespace)::DCE::run() + 1983
7 swift 0x000000011008f55e swift::SILPassManager::runFunctionPasses(llvm::ArrayRef<swift::SILFunctionTransform*>) + 1310
8 swift 0x000000011008ffe9 swift::SILPassManager::runOneIteration() + 633
9 swift 0x000000011008ea56 swift::runSILOptimizationPasses(swift::SILModule&) + 790
10 swift 0x000000010fe92ee7 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4695
11 swift 0x000000010fe91ae6 main + 1814
12 libdyld.dylib 0x00007fff995665c9 start + 1
当我使用Dev / Debug方案时,应用程序编译并运行完美。
我已将编译器问题缩小到单个文件和几行代码。
let directPhoneType = PhoneNumber.Codes.Contacts["D"]
phoneTypes = phoneTypes.filter { $0 != directPhoneType }
我尝试更改过滤代码(使用&#34;&#34;中的元素等),但每次尝试都会导致分段错误。在我们的应用程序中还有其他过滤逻辑可以很好地编译。
如果我删除过滤代码或将其更改为手动过滤手机类型的循环,则应用程序在Release方案中运行正常。
我已尝试将优化级别设置为&#34;最快,未选中&#34;或者&#34;最快&#34;,仍然会发生分段错误。如果我将优化级别设置为&#34;无&#34 ;;项目建设。
在两种方案中,此代码在Swift 1.2之前运行良好。
任何人都对这里发生的事情有任何见解?
更新:看起来Xcode 6.3.1修复了我的seg故障问题。
答案 0 :(得分:4)
遇到同样的问题,没有类似于你的代码。关闭整个模块优化(默认情况下已关闭)解决了我的问题,这意味着我仍然可以使用最快的优化设置进行存档。
答案 1 :(得分:1)
不幸的是,我们有所有这些问题。故障不在你身边,他们很难追查到。通常有些随意的代码更改最终会解决问题。
我们开发的各种迷信包括:尽可能减少unowned
的使用,尽可能减少weak
的使用,谨慎对待??
运算符,谨慎“过多”一行中的内容(如max(min(x,y),z)
),将let
切换为var
等等。
在您的代码中,我可能会尝试将您的let
切换为var
,或尝试删除过滤器并进行旧学校
var resultList = [MyType]()
for type in phoneTypes {
if type != directPhoneType {
resultList.append(type)
}
}
或更改PhoneNumber.Codes.Contacts["D"]
以不同方式访问。
答案 2 :(得分:0)
切换到Swift 1.2时出现此问题,而不仅仅是发布方案。在迁移时,我更改了推荐的&#34; as!&#34; to&#34; as?&#34;以为这就是我想要的。这似乎导致了这个问题;我回去改为&#34; as!&#34;它起作用了。