登录到Visual Studio App Center时,未处理的Xamarin Android异常具有错误的堆栈跟踪

时间:2019-01-24 21:25:32

标签: xamarin xamarin.android visual-studio-app-center

我正在实施Visual Studio AppCenter来处理崩溃,因为它正在替换HockeyApp。我正在通过在代码中手动抛出异常来测试它(不在try / catch块中):

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

然后,我在全局代码中处理Application.cs中所有未捕获的异常,并尝试通过Crashes.TrackError调用将它们记录到AppCenter:

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)<5f142c269d8a438c94480ac03744dec7>:0中的[0x00011]   [包装器动态方法]处的[MonoDroid]   System.Object.60(intptr,intptr,intptr)

但是,在应用程序关闭时,它会使用错误的堆栈跟踪将异常记录到控制台:

  

[AppCenterCrashes] System.Exception:当发生新异常   重定向到属性详细信息! [包装器[AppCenterCrashes]   动态方法)System.Object.60(intptr,intptr,intptr)   [AppCenterCrashes]位于(从包装到托管的包装器)   System.Object.60(intptr,intptr,intptr)

当我在AppCenter中查看时,它仅记录具有错误堆栈跟踪的异常。所以这是一个问题...另一个问题是它完全忽略了我的Crashes.TrackError调用,具有良好堆栈跟踪和属性设置的异常不会添加到AppCenter。

我想念什么?

1 个答案:

答案 0 :(得分:1)

Visual Studio AppCenter会自动为您捕获.NET异常。

您之前发布的Android代码不是必需的。没有它,如果您的SDK正确初始化,您将在仪表板中收到堆栈跟踪。

AndroidEnvironment.UnhandledExceptionRaiser + = LogException;

私有无效LogException(对象发送者,RaiseThrowableEventArgs e){             var exc = e.Exception;             如果(ShouldLogException(exc)){                 //将异常记录到AppCenter。                 var属性= AppCenterLoggingSink.GetProperties();                 Crashes.TrackError(exc,属性);                 e.Handled = true;             }         }

以上代码仅适用于Android平台。因此,基本上,您会收到Android错误,这意味着您的应用程序崩溃了,然后将其发送到appcenter。因此,这种行为对我来说似乎是合乎逻辑的。

让AppCenter自己捕获崩溃,您应该可以处理.NET异常。