Xamarin Forms, как записать необработанное исключение - PullRequest
0 голосов
/ 22 октября 2018

У меня есть следующий код в моем проекте Xamarin Forms.Я использовал SentryErrorLog для регистрации исключения и сохранял сообщение об исключении на устройстве pp локально.Я проверил следующий код, и регистрация прошла успешно.Но я обнаружил, что когда происходит неизвестное исключение, вызывающее сбой приложения, в Sentry и ExternalStorageDirectory нет журнала.Неизвестное исключение вызвало завершение работы приложения и всплыло сообщение «{Имя приложения} остановлено».

Поскольку нет журнала исключения, поэтому я не знаю, как его исследовать.И это исключение случается иногда, мне трудно найти причину.Итак, я хочу знать, пропустил ли я какой-либо код, чтобы поймать исключение?Или иногда Android закрывает приложение до того, как приложение запустит обработчик события исключения?

    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
    }

Или, может быть, мне стоит использовать другой аварийный регистратор?

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете добавить эти коды ниже, чтобы зарегистрировать необработанное исключение:

Android:

// 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) =>

UWP:

// In OnLaunched:

UnhandledException += OnUnhandledException;

и вот несколько ссылок, которые могут помочь:

Регистрация Xamarin необработанных (Android uncaught) исключений

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

...