Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未处理的Xamarin Android异常在登录到Visual Studio应用程序中心时具有错误的堆栈跟踪_Xamarin_Xamarin.android_Visual Studio App Center - Fatal编程技术网

未处理的Xamarin Android异常在登录到Visual Studio应用程序中心时具有错误的堆栈跟踪

未处理的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

我正在实现VisualStudioAppCenter来处理崩溃,因为它正在取代HockeyApp。我通过在代码中手动抛出异常(而不是在try/catch块中)来测试它:

然后,我有了全局处理Application.cs中任何未捕获异常的代码,并尝试使用crasks.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]系统。异常:重定向到时出现新异常 物业详情![单机器人]在 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;
        }
    }