我正在实施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。
我想念什么?
答案 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异常。