Необработанные исключения Xamarin для Android имеют плохую трассировку стека при входе в Visual Studio App Center - PullRequest
0 голосов
/ 25 января 2019

Я реализую Visual Studio AppCenter для обработки сбоев, поскольку он заменяет HockeyApp. Я проверяю это, выдавая исключение вручную в моем коде (НЕ в блоке try / catch):

throw new Exception ("New exception when redirecting to property details!");

Затем у меня есть код, который глобально обрабатывает любые необработанные исключения в Application.cs и пытается записать их в AppCenter с помощью вызова Crashes.TrackError:

AndroidEnvironment.UnhandledExceptionRaiser += LogException;

private void LogException (object sender, RaiseThrowableEventArgs e) {
            var exc = e.Exception;
            if (ShouldLogException (exc)) {
                // Log exception to AppCenter.
                var properties = AppCenterLoggingSink.GetProperties ();
                Crashes.TrackError (exc, properties);
                e.Handled = true;
            }
        }

Когда я это делаю, трассировка стека, которая записывается на консоль, выглядит хорошо:

[MonoDroid] System.Exception: новое исключение при перенаправлении на детали собственности! [MonoDroid] в RPR.Mobile.Droid.Fragments.RecentActivityFragment.RedirectToPropertyDetails (Свойство RPR.Mobile.Shared.Entities.PropertyDetails.Property) [0x00001] в /Users/justintoth/Documents/rpr-mobile/android-application/Fragments/RecentActivityFragment.cs:190 [MonoDroid] в RPR.Mobile.Droid.Fragments.RecentActivityFragment.b__15_0 (Свойство RPR.Mobile.Shared.Entities.PropertyDetails.Property) [0x00000] в /Users/justintoth/Documents/rpr-mobile/android-application/Fragments/RecentActivityFragment.cs:170 [MonoDroid] в RPR.Mobile.Droid.Adapters.SearchResults.PropertyListRowPhotoAdapter.b__2_0 (System.Object o, System.EventArgs e) [0x00001] в /Users/justintoth/Documents/rpr-mobile/android-application/Adapters/SearchResults/PropertyListRowPhotoAdapter.cs:34 [MonoDroid] в Android.Views.View + IOnClickListenerImplementor.OnClick (Android.Views.View v) [0x00011] в <5f142c269d8a438c94480ac03744dec7>: 0 [MonoDroid] в Android.Views.View + IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_v) [0x00011] в <5f142c269d8a438c94480ac03744dec7>: 0 [MonoDroid] at (динамический метод-обертка) System.Object.60 (IntPtr, IntPtr, IntPtr)

Однако, когда приложение закрывается, оно записывает исключение на консоль с плохой трассировкой стека:

[AppCenterCrashes] System.Exception: новое исключение, когда перенаправление на детали недвижимости! [AppCenterCrashes] в (оболочка динамический метод) System.Object.60 (intptr, intptr, intptr) [AppCenterCrashes] at (оболочка, встроенная в управляемую) System.Object.60 (IntPtr, IntPtr, IntPtr)

Когда я смотрю в AppCenter, он регистрирует исключение ТОЛЬКО с плохой трассировкой стека. Так что это проблема ... Другая проблема заключается в том, что он полностью проигнорировал мой вызов Crashes.TrackError, исключение с хорошей трассировкой стека и набором свойств не добавляется в AppCenter.

Чего мне не хватает?

1 Ответ

0 голосов
/ 25 января 2019

Visual Studio AppCenter автоматически распознает исключения .NET для вас.

Код Android, который вы разместили ранее, не нужен. Без этого, если ваш SDK инициализирован правильно, вы получите трассировки стека на панели инструментов.

AndroidEnvironment.UnhandledExceptionRaiser += LogException;

private void LogException (object sender, RaiseThrowableEventArgs e) {
        var exc = e.Exception;
        if (ShouldLogException (exc)) {
            // Log exception to AppCenter.
            var properties = AppCenterLoggingSink.GetProperties ();
            Crashes.TrackError (exc, properties);
            e.Handled = true;
        }
    }

Приведенный выше код предназначен только для платформы Android. Таким образом, в основном вы получаете ошибку Android, что означает, что ваше приложение упало, и вы отправляете это в appcenter. Поэтому поведение кажется мне логичным.

Пусть AppCenter перехватывает сбои сам по себе, и вы должны подойти для исключений .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...