首页 > 解决方案 > Xamarin Forms,如何记录未处理的异常

问题描述

我的 Xamarin Forms 项目中有以下代码。我使用 SentryErrorLog 记录异常并将异常消息保存到本地 pp 设备。我已经测试了以下代码并且记录成功。但是我发现当出现未知异常导致App崩溃时,Sentry和ExternalStorageDirectory都没有日志。未知异常导致 App 关闭并弹出消息“{App name} 已停止”。

因为没有异常的日志,所以不知道怎么排查。而且这种异常只是偶尔发生,我很难找到原因。所以我想知道我是否错过了任何捕获异常的代码?或者有时Android会在App触发异常事件处理程序之前关闭App?

    public override void OnCreate()
    {
        base.OnCreate();

        ravenClient = SentryErrorLog.CreateRavenClient();
        AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser;
    }

    private void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e)
    {
        ravenClient.LogException(e.Exception);
        LogExceptionLocally(e.Exception);
    }

    private void LogExceptionLocally(Exception e)
    {
        // Log to ExternalStorageDirectory
    }

或者也许我应该使用其他崩溃记录器?

标签: xamarin.formserror-logging

解决方案


您可以在下面添加这些代码来记录未处理的异常:

安卓:

// In OnCreate,

AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironmentOnUnhandledException;

IOS:

// In FinishedLaunching:

AppDomain.CurrentDomain.UnhandledException += async (sender, e) =>
TaskScheduler.UnobservedTaskException += async (sender, e) =>

超轻量级:

// In OnLaunched:

UnhandledException += OnUnhandledException;

以下是一些可能有帮助的链接:

记录 Xamarin 未处理(Android 未捕获)异常

https://forums.xamarin.com/discussion/103962/go-back-to-mainpage-if-there-is-an-unhandled-exception


推荐阅读