Xcode13升级后出现无法定位的Segmentation Fault:11错误 Xcode12无法复现
Xcode 12升级Xcode 13编译Segmentation fault: 11问题解决方案
该错误是Xcode 13内置的Swift 5.5编译器的已知内部bug,仅在Xcode 13版本触发,Xcode 12环境不会复现。崩溃发生在SIL优化阶段的PredictableDeadAllocationElimination(可预测死代码分配消除)步骤,错误明确指向Extensions.swift文件第323行UIViewController扩展的mainContainer属性getter逻辑。
完整错误日志如下:
1. Apple Swift version 5.5 (swiftlang-1300.0.31.1 clang-1300.0.29.1) 2. 3. While evaluating request ExecuteSILPipelineRequest(Run pipelines { Mandatory Diagnostic Passes + Enabling Optimization Passes } on SIL for LynxDispatch.LynxDispatch) 4. While running pass #3799 SILFunctionTransform "PredictableDeadAllocationElimination" on SILFunction "@$sSo16UIViewControllerC12LynxDispatchE13mainContainerAC0f4ViewB0CSgvg". for getter for mainContainer (at /Users/hamidmahmood/Main/Projects-All/Work Projects/Lynx Dispatch/lynxdispatch-ios/LynxDispatch/LynxDispatch/Helpers/Extensions.swift:323:9) Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it): 0 swift-frontend 0x00000001097cd6f7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 39 1 swift-frontend 0x00000001097cc688 llvm::sys::RunSignalHandlers() + 248 2 swift-frontend 0x00000001097cdd06 SignalHandler(int) + 278 3 libsystem_platform.dylib 0x00007fff20473d7d _sigtramp + 29 4 libsystem_platform.dylib 000000000000000000 _sigtramp + 18446603339974623904 5 swift-frontend 0x0000000105534a43 swift::recursivelyDeleteTriviallyDeadInstructions(llvm::ArrayRef<swift::SILInstruction*>, bool, llvm::function_ref<void (swift::SILInstruction*)>) + 2275 6 swift-frontend 0x0000000105534c2b swift::eraseUsesOfInstruction(swift::SILInstruction*, llvm::function_ref<void (swift::SILInstruction*)>) + 203 7 swift-frontend 0x00000001052dde47 (anonymous namespace)::PredictableDeadAllocationElimination::run() + 6855 8 swift-frontend 0x000000010530a7b9 swift::SILPassManager::runFunctionPasses(unsigned int, unsigned int) + 4409 9 swift-frontend 0x000000010530692b swift::SILPassManager::executePassPipelinePlan(swift::SILPassPipelinePlan const&) + 155 10 swift-frontend 0x000000010532120c swift::SimpleRequest<swift::ExecuteSILPipelineRequest, std::__1::tuple<> (swift::SILPipelineExecutionDescriptor), (swift::RequestFlags)1>::evaluateRequest(swift::ExecuteSILPipelineRequest const&, swift::Evaluator&) + 60 11 swift-frontend 0x000000010530f005 llvm::Expected<swift::ExecuteSILPipelineRequest::OutputType> swift::Evaluator::getResultUncached<swift::ExecuteSILPipelineRequest>(swift::ExecuteSILPipelineRequest const&) + 469 12 swift-frontend 0x00000001053113bb swift::runSILDiagnosticPasses(swift::SILModule&) + 187 13 swift-frontend 0x0000000104a5a6de swift::CompilerInstance::performSILProcessing(swift::SILModule*) + 62 14 swift-frontend 0x0000000104905d59 performCompileStepsPostSILGen(swift::CompilerInstance&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule> >, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver*) + 1161 15 swift-frontend 0x00000001048f7d46 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 13494 16 swift-frontend 0x0000000104839a48 main + 1032 17 libdyld.dylib 0x00007fff20449f3d start + 1 18 libdyld.dylib 0x000000000000010f start + 18446603339974795731 error: Segmentation fault: 11 (in target 'LynxDispatch' from project 'LynxDispatch')
修复方案
- 临时快速修复:单独关闭对应文件的编译优化
打开项目对应Target → 进入Build Phases → Compile Sources列表,找到Extensions.swift文件,双击右侧Compiler Flags列,添加参数-O0,即可绕开导致崩溃的优化步骤,无需修改代码即可正常编译。 - 代码改写规避
找到Extensions.swift第323行的mainContainer计算属性getter,该bug通常由单行复杂链式可选调用、隐式解包操作触发,将单行逻辑拆分为多行临时变量赋值后返回,或者将计算属性改为懒加载存储属性即可规避。
示例修改参考:// 原可能触发崩溃的单行写法 var mainContainer: MainContainerView? { view.subviews.first { $0 is MainContainerView } as? MainContainerView } // 修改后可规避的写法 var mainContainer: MainContainerView? { let targetView = view.subviews.first { subview in return subview is MainContainerView } return targetView as? MainContainerView } - 彻底修复
升级Xcode到13.1及以上版本,苹果已在后续版本修复了该SIL优化阶段的崩溃问题,无需修改任何代码即可正常编译。 - 修复后建议清空缓存重试:按住Option键点击顶部菜单栏Product → 选择Clean Build Folder,或手动删除
~/Library/Developer/Xcode/DerivedData目录下的对应项目缓存,避免旧编译缓存导致的异常。
内容的提问来源于stack exchange,提问作者Hamid DevTech
相关产品推荐
相关产品推荐

