Xamarin iOS应用调试启动崩溃但直接运行正常的诡异问题
Xamarin.Forms 4.8 页面实例化诡异延迟与崩溃问题
应用背景
应用规模较大,已服务数百用户,基于Xamarin.Forms 4.8版本开发,采用SHARED CODE模式。项目中大量页面继承自BasePage(该类继承自ContentPage),XAML与代码文件嵌套规范,具备完善的控制台及文件日志记录能力。近期完成一次分歧代码的重大合并后,启动时会实例化InfPumpPage页面,随即出现异常问题。
诡异现象
- 调用
new InfPumpPage()时日志正常输出,但崩溃时,构造函数第一行(InitializeComponent()执行前)的日志完全未出现 - 移除该页面几乎所有代码(保留XAML不变),应用可正常运行,但
new()到构造函数日志的延迟仍存在,无代码时延迟约0.5秒,而其他更复杂页面的最长延迟仅4毫秒 - 逐步恢复页面代码,应用仍能运行,但每添加一部分代码,延迟就会变长;当延迟达到约12秒时,调试器仅显示“App Terminated”;但不通过调试器直接运行应用时,
new()到构造函数日志的延迟仅1毫秒 - 删除该页面的
.xaml和.xaml.cs文件,通过“Add Item”重新创建,仅保留满足公共接口的极简代码且基本无XAML内容,延迟问题依旧存在,推测代码量足够时仍会崩溃,且无任何代码运行的迹象
已尝试的排查措施
- Debug模式下调整链接器行为:从
Don't Link改为Link Framework,无效果 - 尝试勾选/取消勾选
Enable the Mono Interpretter,无改善 - 大幅调整页面构造顺序,未解决问题
- 排查垃圾回收问题:该页面对象内存占用仅13K(其他复杂页面内存变化达1.4MB),排除GC导致的异常
- 更新Windows Visual Studio到17.3.6版本,更新Xamarin.iOS到16.0.0.75版本,问题仍存在
后续更新
- 将链接器行为改为
Link All后,问题曾解决,但大半天后复发 - 更新Mac OS和XCode版本后,问题暂时恢复正常,计划尝试删除
.vs文件夹排查
内容的提问来源于stack exchange,提问作者bobwki
相关产品推荐
相关产品推荐

