运行 可执行文件时 WinForms AppCenter 崩溃不工作

WinForms AppCenter Crashes not working when running executable

我有一个 WinForms 应用程序并添加了 AppCenter 崩溃跟踪支持。 我还添加了崩溃代表 Crashes.ShouldProcessErrorReport、Crashes.SendingErrorReport、Crashes.SentErrorReport、Crashes.FailedToSendErrorReport。 并将它们记录到一个文本文件中以确保它们被调用。出于测试目的,我通过抛出 WhosebugException.

来引发未处理的异常

在Visual Studio下调试程序时一切正常,日志被写入文本文件,崩溃被发送到AppCenter服务器。 当 运行 直接调试可执行委托时,不会调用并且不会发送崩溃。 我已经检查并启用了崩溃 API。

                    Crashes.ShouldProcessErrorReport = (ErrorReport report) => 
                    {
                        DataLogger.Error("AppCenter process error");
                        return true; // return true if the crash report should be processed, otherwise false.
                    };

                    Crashes.SendingErrorReport += (object sender, SendingErrorReportEventArgs e) =>
                    {
                        // Your code, e.g. to present a custom UI.
                        string s = e.Report.Exception.StackTrace;
                        Console.WriteLine(s);
                        DataLogger.Error("AppCenter sending ", e.Report.Exception);
                    };

                    Crashes.SentErrorReport += (object sender, SentErrorReportEventArgs e) => {
                        // Your code, e.g. to hide a custom UI.
                        DataLogger.Error("Appcenter successfully sent a crash");
                    };

                    Crashes.FailedToSendErrorReport += (object sender, FailedToSendErrorReportEventArgs e) => {
                        // Your code goes here.
                        string s = e.Exception.ToString();
                        Console.WriteLine(s);
                        DataLogger.Error("AppCenter failed to send " + s);

                    };

                    AppCenter.Start("SECRET_KEY", typeof(Analytics), typeof(Crashes));

                    bool isEnabled = Crashes.IsEnabledAsync().Result;
                    DataLogger.Error("AppCeneter enabled " + isEnabled);

                    Application.Run(new MyForm());

确保您已阅读有关如何 WinForms handles crashes differently 的文档。除非您使用以下代码行禁用了默认的 WinForms 行为,否则它不会真正崩溃。

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);

此外,WhosebugExceptions有一些特殊的行为,例如:

“Starting with the .NET Framework version 2.0, a WhosebugException object cannot be caught by a try-catch block and the corresponding process is terminated by default.”

当调试器作为特殊行为的一部分附加时,它的行为可能会有所不同。即使在允许 WinForms 崩溃之后,您可能需要尝试使用没有特殊规则的不同类型的异常。事实上,提供了一个特定的函数来完成这个:

Crashes.GenerateTestCrash();