forms - Xamarin Forms 应用程序崩溃没有日志

标签 forms xamarin crash report

我正在使用具有路线跟踪功能的 Xamarin Forms 开发一些应用程序。尽管我正在使用 AppCenter,即在 App.xaml.cs OnStart 我添加

    protected async override void OnStart()
    {
        AppCenter.Start("android=__mycode___" +
                          "uwp={Your UWP App secret here};" +
                          "ios={Your iOS App secret here}",
                          typeof(Analytics), typeof(Crashes));


        bool hadMemoryWarning = await Crashes.HasReceivedMemoryWarningInLastSessionAsync();
        ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();

        if (crashReport != null)
        {
            Analytics.TrackEvent(crashReport.StackTrace);
        }
        
    }
事实上,我在 AppCenter 中使用 Crashes.GenerateTestCrash() 测试了我的应用程序并获得了测试崩溃报告。此外,我使用这种方法发现了一些错误。但是现在至少有一个原因使我的应用程序崩溃而没有任何消息发送到 AppCenter。有什么线索可以解决这个问题吗?

最佳答案

尝试使用实际的异步事件处理程序。

private event EventHandler onStart = delegate { };

protected override void OnStart() {
    onStart += handleStart; //subscribe
    onStart(this, EventArgs.Empty); //raise event
}

private async void handleStart(object sender,EventArgs args) {
    onStart -= handleStart; //unsubscribe
    try {
        AppCenter.Start("android=__mycode___" +
                          "uwp={Your UWP App secret here};" +
                          "ios={Your iOS App secret here}",
                          typeof(Analytics), typeof(Crashes));


        bool hadMemoryWarning = await Crashes.HasReceivedMemoryWarningInLastSessionAsync();
        ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();

        if (crashReport != null) {
            Analytics.TrackEvent(crashReport.StackTrace);
        }
    } catch (Exception ex) {
        //...handle exception or log as needed
    }        
}
OnStart是一个简单的 void 方法,而不是实际的事件处理程序。这意味着当它被设为异步时,它将成为一个即发即弃的函数,它不会让你捕捉到任何可能发生在其中的异常。
如果它在启动时没有被捕获,则可能意味着您正在使用非事件 async void 在应用程序内的某处做类似的事情。没有被发现并且正在使应用程序崩溃。
首先搜索任何 async void在您的代码中并检查以确保它是一个实际的事件处理程序。

关于forms - Xamarin Forms 应用程序崩溃没有日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68089505/

相关文章:

javascript - 预填写外部 HTML 表单?

azure - 将单个表数据推送到 Azure

Xamarin Forms - 当不存在输入控件时,物理键盘会使页面变暗

iphone - 即使没有与 UIViewController 关联的 Nib ,也会调用 _loadViewFromNibNamed

android - 为什么应用程序在调用 GPS 时崩溃?

python - 使用 python 登录网站(特别是 netflix)

JQuery 解决方案通过单击输入字段附近的按钮来发现输入字段 ID/名称值

css - 如何将CSS样式应用到标签的弹出标题元素

c# - 缺少样式字段 MvxExpandableListView_GroupItemTemplate

xcode - Xcode尝试编辑断点时崩溃