Compiler optimization 应用程序崩溃,Xcode11.4,iOS 10.3.3 10.3.4,iPhone 5c/5 iPad4(armv7s)

Compiler optimization 应用程序崩溃,Xcode11.4,iOS 10.3.3 10.3.4,iPhone 5c/5 iPad4(armv7s),compiler-optimization,swift5,xcode11.4,Compiler Optimization,Swift5,Xcode11.4,我们的应用程序在os 10.3.3 10.3.4、iPhone 5c/5 iPad4(armv7s 32)上崩溃,由Xcode 11.4编译,swift optimization on。我们发现PC寄存器指向一个没有虚拟地址和堆栈信息的孔地址。如果我们关闭swift优化,它就会工作 那么,有人找到了问题和解决方案吗 可以肯定的是,它与Xcode 11.4 swift优化有关 我在这里发现了同样的问题 我们还遇到了多个在使用iOS 9或10的旧32位设备上崩溃的问题。用Xcode 11.3.1重新

我们的应用程序在os 10.3.3 10.3.4、iPhone 5c/5 iPad4(armv7s 32)上崩溃,由Xcode 11.4编译,swift optimization on。我们发现PC寄存器指向一个没有虚拟地址和堆栈信息的孔地址。如果我们关闭swift优化,它就会工作

那么,有人找到了问题和解决方案吗

可以肯定的是,它与Xcode 11.4 swift优化有关

我在这里发现了同样的问题


我们还遇到了多个在使用iOS 9或10的旧32位设备上崩溃的问题。用Xcode 11.3.1重新编译修复了我案例中的那些随机崩溃


在进行了大量的分析(如日志和指令调试)之后,我确信这是一个Bug xcode 11.4 swift编译器优化。 详细地说,优化会导致在打开新函数堆栈帧的点处堆栈指针(fp)混乱。 我在下面展示它

以下是编译器在MainViewController中生成的myapp.MainViewController的帮助函数
类型元数据访问器

,这是错误的。应该是

0x6cd85c <+0>:   push.w {r4, r5, r6, r7, lr}
0x6cd860 <+4>:   add  r7, sp, #0xc
0x6cd85c:push.w{r4,r5,r6,r7,lr}
0x6cd860:添加r7,sp,#0xc
r7是fp。因此,错误指令不能保存r7,并且子ins使r7比sp低很多,从而导致整个堆栈混乱。所以这显然是错误的

这就是ins执行时发生的情况

之前:

之后:

由于fp错误,整个堆栈丢失

我们还可以在xcode 11.3中验证这一点。 与我们上面的期望相同


因此,我们也必须降级到xcode 11.3,并使用运行时反射来适应新的iOS SDK功能,该功能应该在xcode 11.4中调用。

这在xcode 11.5中是固定的。 自5月18日起上市的转基因玉米种子


我们也必须降级到xcode 11.3,并使用运行时反射来适应新的iOS SDK功能,该功能应该在xcode 11.4中调用。这个问题是否可能在xcode 11.4.1中得到解决?发行说明中提到了几个固定的崩溃,但我不确定它是否涵盖了这一个。是的,我注意到了新版本。但我仍然没有检查它。@VictorChoy一份来自iOS 13设备的崩溃报告指向Firebase报告的同一问题,这可能吗?@PedroPauloAmorim根据图片,我发现它发生在编译器生成的函数中。我想这也和swift编译器有关。但我们的崩溃在2013年几乎没有发生。因此,我建议调试编译器生成的指令,并对其逻辑进行分析。@TomKraina遗憾的是,它在Xcode 11.4.1中似乎没有得到修复。
0x6cd85c <+0>:   push.w {r4, r5, r6, r7, lr}
0x6cd860 <+4>:   add  r7, sp, #0xc