You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms Android项目Crashlytics上报文件名显十六进制、行号为0问题排查

问题诱因

核心原因是Xamarin.Android的托管代码(C#编写的业务代码)调试符号(PDB)默认不会和Firebase Crashlytics的符号解析体系打通,Crashlytics默认仅能识别Android原生层的符号信息,无法直接解析.NET托管程序集的调试数据。
具体触发场景包括:

  • Release构建下默认未开启完整托管调试符号生成,仅生成IL偏移量无对应源码映射
  • 直接使用原生Crashlytics的Java层异常捕获逻辑,捕获到的托管异常栈已经过JavaProxy转换,丢失了原生.NET栈的文件名、行号信息
  • 即使关闭了R8/ProGuard压缩混淆,若Xamarin链接器仍在裁剪托管程序集,也会剥离调试关联元数据
解决方案

你已关闭R8、ProGuard压缩混淆是解决该问题的必要前提,还需补充以下配置:

1. 调整托管代码构建配置

  • 右键Android项目 → 属性 → 安卓选项 → 链接器,Release配置下的链接行为先设置为「不链接」做验证,验证通过后如果需要缩减包体积,可调整为「仅链接SDK程序集」,并将自己的业务程序集加入裁剪排除列表
  • 点击同页面的「高级」按钮,将调试信息格式设置为可移植PDB(Portable PDB),同时勾选「生成调试符号」
  • 手动检查Android项目.csproj文件的Release配置节点,确保存在以下配置:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DebugSymbols>True</DebugSymbols>
  <DebugType>Portable</DebugType>
  <!-- 其他已有配置保持不变 -->
</PropertyGroup>

2. 接管全局异常捕获上报

不要依赖原生Crashlytics的Java层自动捕获逻辑,在.NET层注册全局异常事件,将完整的托管异常栈手动上报:

  • 首先安装Xamarin.Firebase.Crashlytics NuGet包到Android项目
  • 在Xamarin.Forms项目的App.xaml.cs构造函数中注册全局异常监听:
public App()
{
    InitializeComponent();
    RegisterGlobalExceptionHandler();
    // 其他初始化逻辑
}

private void RegisterGlobalExceptionHandler()
{
    // 捕获未处理的同步异常
    AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
    {
        if (args.ExceptionObject is Exception ex)
        {
            UploadExceptionToCrashlytics(ex);
        }
    };

    // 捕获未观察到的任务异常
    TaskScheduler.UnobservedTaskException += (sender, args) =>
    {
        UploadExceptionToCrashlytics(args.Exception);
        args.SetObserved();
    };
}

private void UploadExceptionToCrashlytics(Exception ex)
{
#if ANDROID
    Firebase.Crashlytics.FirebaseCrashlytics.Instance.RecordException(Java.Lang.Throwable.FromException(ex));
#endif
}

3. 离线符号解析配置

如果仍有部分异常栈显示十六进制ID,可留存每次发布版本对应的所有可移植PDB文件,使用mono-symbolicate工具将异常栈中的IL偏移量转换为源码文件名和行号,执行命令如下:
mono-symbolicate 你的PDB文件目录路径 异常栈文本文件路径


内容的提问来源于stack exchange,提问作者PacoPeps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:51:01