未处理的Xamarin Android异常在登录到Visual Studio应用程序中心时具有错误的堆栈跟踪
我正在实现VisualStudioAppCenter来处理崩溃,因为它正在取代HockeyApp。我通过在代码中手动抛出异常(而不是在try/catch块中)来测试它: 然后,我有了全局处理Application.cs中任何未捕获异常的代码,并尝试使用crasks.TrackError调用将它们记录到AppCenter:未处理的Xamarin Android异常在登录到Visual Studio应用程序中心时具有错误的堆栈跟踪,xamarin,xamarin.android,visual-studio-app-center,Xamarin,Xamarin.android,Visual Studio App Center,我正在实现VisualStudioAppCenter来处理崩溃,因为它正在取代HockeyApp。我通过在代码中手动抛出异常(而不是在try/catch块中)来测试它: 然后,我有了全局处理Application.cs中任何未捕获异常的代码,并尝试使用crasks.TrackError调用将它们记录到AppCenter: AndroidEnvironment.UnhandledExceptionRaiser += LogException; private void LogException
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]系统。异常:重定向到时出现新异常
物业详情![单机器人]在
RPR.Mobile.Droid.Fragments.RecentActivityFragment.RedirectTopPropertyDetails
(RPR.Mobile.Shared.Entities.PropertyDetails.Property属性)
[0x00001]英寸
/Users/justintoth/Documents/rpr mobile/android application/Fragments/RecentActivityFragment.cs:190
[单机器人]在
RPR.Mobile.Droid.Fragments.RecentActivityFragment.b_uu15_0
(RPR.Mobile.Shared.Entities.PropertyDetails.Property属性)
[0x00000]英寸
/Users/justintoth/Documents/rpr mobile/android application/Fragments/RecentActivityFragment.cs:170
[单机器人]在
RPR.Mobile.Droid.Adapters.SearchResults.propertylistrowphotooadapter.b__2_0
(System.Object o,System.EventArgs e)[0x00001]位于
/Users/justintoth/Documents/rpr mobile/android application/Adapters/SearchResults/PropertyListRowPhotoAdapter.cs:34
[单机器人]在
Android.Views.View+IOnClickListenerImplementor.OnClick
(Android.Views.View v)[0x00011]位于
:0[单机器人]at
Android.Views.View+ion单击ListenerInvoker.n\u OnClick\u Landroid\u View\u视图_
(System.IntPtr jnienv,System.IntPtr native_u_uthis,System.IntPtr
本机_v)[0x00011]位于:0
[MonoDroid]at(包装器动态方法)
System.Object.60(intptr、intptr、intptr)
但是,当应用程序关闭时,它会将异常记录到控制台,并带有错误的堆栈跟踪:
[AppCenterCrash]系统。异常:当
正在重定向到属性详细信息![AppCenterCrash]位于(包装器)
动态方法)System.Object.60(intptr、intptr、intptr)
[AppCenterCrash]位于(包装器本机到托管)
System.Object.60(intptr、intptr、intptr)
当我在AppCenter中查看时,它只记录带有错误堆栈跟踪的异常。所以这是一个问题。。。另一个问题是它完全忽略了我的crasks.TrackError调用,具有良好堆栈跟踪和属性集的异常不会添加到AppCenter
我遗漏了什么?Visual Studio AppCenter会自动为您捕获.NET异常 您之前发布的Android代码不是必需的。没有它,如果SDK正确初始化,您将在仪表板中收到stacktraces
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异常。如果您以常规方式执行,在try-catch中,它是否正常工作?@BrunoCaceiro是的,工作正常。不良堆栈跟踪是指它不完整吗?这很有效,谢谢!我试图手动处理未捕获的异常,以便可以对其设置自定义属性,但是我想这样做时会丢失真正的异常。我现在还没有自定义属性,希望AppCenter将来能提供一种getter方法来记录这些未处理的异常。
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;
}
}