Xamarin.forms Xamarin表单,如何记录未处理的异常
我的Xamarin表单项目中有以下代码。我使用SentryErrorLog记录异常,并在本地将异常消息保存到pp设备。我已经测试了以下代码,并且日志记录是成功的。但我发现,当有未知异常导致应用程序崩溃时,Sentry和ExternalStorageDirectory中没有日志。未知异常导致应用程序关闭,并弹出消息“{App name}已停止” 因为没有异常日志,所以我不知道如何调查它。这种例外只是偶尔发生,我很难找到原因。所以我想知道我是否错过了捕获异常的任何代码?或者有时Android会在应用程序触发异常事件处理程序之前关闭应用程序Xamarin.forms Xamarin表单,如何记录未处理的异常,xamarin.forms,error-logging,Xamarin.forms,Error Logging,我的Xamarin表单项目中有以下代码。我使用SentryErrorLog记录异常,并在本地将异常消息保存到pp设备。我已经测试了以下代码,并且日志记录是成功的。但我发现,当有未知异常导致应用程序崩溃时,Sentry和ExternalStorageDirectory中没有日志。未知异常导致应用程序关闭,并弹出消息“{App name}已停止” 因为没有异常日志,所以我不知道如何调查它。这种例外只是偶尔发生,我很难找到原因。所以我想知道我是否错过了捕获异常的任何代码?或者有时Android会在应用
public override void OnCreate()
{
base.OnCreate();
ravenClient = SentryErrorLog.CreateRavenClient();
AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser;
}
private void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e)
{
ravenClient.LogException(e.Exception);
LogExceptionLocally(e.Exception);
}
private void LogExceptionLocally(Exception e)
{
// Log to ExternalStorageDirectory
}
或者我应该使用其他故障记录器?您可以在下面添加这些代码来记录未处理的异常: 安卓:
// In OnCreate,
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironmentOnUnhandledException;
iOS:
UWP:
以下是一些可能有帮助的链接:
我尝试了AppDomain.CurrentDomain.UnhandledException+=CurrentDomainOnUnhandledException代码>。我手动抛出一个异常进行测试,发现
UnhandledException
和UnhandledExceptionRaiser
都被触发,所以我得到了一个异常的两个日志。不应出现重复的日志。这两个事件之间有什么区别?我只是担心操作系统可能会在应用程序开始记录异常之前关闭应用程序。别担心。如果你的应用程序由于应用程序中的异常而崩溃,你的应用程序可以在关闭前记录异常。实际上,这两个事件之间没有太大区别。你可以参考以查看差异。感谢你的帮助,在我添加了AppDomain.CurrentDomain.UnhandledException
之后,我捕获了异常,这是一个AndroidRuntime错误。但是未处理的ExceptionRaiser
没有捕获它。看来UnhandledException
处理程序可以捕获范围更广的异常?根据上面的链接,查找UnhandledExceptionRaiser
将.NET异常转换为适当的Java端异常,这在某些情况下可能是必要的?我只能使用未处理异常
?如果同时添加这两个日志,我将获得重复的日志。您只能使用未处理的异常
。请参阅了解未处理的异常提升器的操作。
// In FinishedLaunching:
AppDomain.CurrentDomain.UnhandledException += async (sender, e) =>
TaskScheduler.UnobservedTaskException += async (sender, e) =>
// In OnLaunched:
UnhandledException += OnUnhandledException;