运行 可执行文件时 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();
我有一个 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();