当前位置: 首页 > 知识库问答 >
问题:

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

路欣荣
2023-03-14

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

throw new Exception ("New exception when redirecting to property details!");
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.PropertyDetails.propertyPropertyPropertyPropertyProperty)[0x00001]在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 ick_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]at(包装器动态方法)System.object.60(intptr,intptr,intptr)[AppCenterCrashes]at(包装器本机到托管)System.object.60(intptr,intptr,intptr)

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

我错过了什么?

共有1个答案

吕寒
2023-03-14

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块时,我们可以使用e打印catch块中的堆栈跟踪。printStacktrace()方法。 如果出现未处理的异常,仍会打印堆栈跟踪。 谁在控制台上打印堆栈跟踪?怎么做?

  • 问题内容: 这可能是一个非常幼稚的问题。 我曾经相信Java 中的a 总是 包含堆栈跟踪。这是正确的吗? 现在看起来我捕获了 没有 堆栈跟踪的异常。是否有意义?是否 可以 在没有堆栈跟踪的情况下捕获异常? 问题答案: 无需堆栈跟踪就可以捕获Java中的Throwable对象: 构造一个具有指定详细消息,原因,启用或禁用原因,启用或禁用 可写堆栈跟踪 的新throwable 。 填写执行堆栈跟踪。此

  • 现在看来,我在没有堆栈跟踪的情况下捕获异常。有道理吗?是否有可能在没有堆栈跟踪的情况下捕获异常?

  • 问题内容: 如何将异常的堆栈跟踪信息打印到stderr以外的流上?我发现的一种方法是使用getStackTrace()并将整个列表打印到流中。 问题答案: 可以接受or或参数: 也就是说,请考虑将SLF4J之类的记录器接口与LOGBack或log4j之类的记录实现一起使用。

  • Edit2 @Paradematic在建议重定向而不是抛出异常方面做得很好;这解决了日志记录问题。Play 2中的问题是,重定向需要发生在所谓的范围内,而日期解析器调用并不总是这样。 最初的 有一个问题,即我的application.log被与uri日期解析器操作相关的错误填满,如果给定有效的uri日期,该操作应该成功。 然而,一些用户试图通过输入无效日期来规避这一点,希望获得免费访问付费订阅者专

  • 问题内容: 最近,我问是否要报告捕获到的异常的文本。出乎意料的是,大多数答案都误解了我的问题,并以为我在问是否要报告堆栈跟踪以获取捕获的异常,这表明这样做是正常的。所以我要问一个后续问题。 在例外情况下,应该或不应该在什么情况下报告堆栈跟踪?通过“报告”,我包括要求一个日志记录框架为您记录堆栈跟踪 我不问是否报告 的东西 。我在问那个报告是否应该包括堆栈跟踪。 问题答案: 它取决于上下文。例如,当