我正在尝试在使用 Xamarin 构建的仅限 Android 的应用程序中实现未捕获的异常处理程序以用于日志记录。
AppDomain.CurrentDomain.UnhandledException += (o, e) => exLogger.UncaughtException((Exception)e.ExceptionObject);
TaskScheduler.UnobservedTaskException += (o, e) => exLogger.UncaughtException(e.Exception);
和
public void UncaughtException(Exception ex)
{
try
{
Log.Error(TAG, "Exception caught: {0}", ex.Message ?? "Unknown Exception");
var di = Directory.CreateDirectory(Path.Combine(context.FilesDir.AbsolutePath, TAG));
//Rest of Handler - saves error to file system, attempts to upload to a server
...
}
catch (Exception)
{
Log.Error(TAG, "Exception handler failed");
}
}
当我在一个非常简单的“Hello World”应用程序中实现它时,有问题的处理程序可以零问题工作,我在按钮按下时触发异常:
throw new Exception("this is a test exception");
(或类似的)。
然而,当我在我实际开发的应用程序中做同样的事情时,应用程序在处理程序中崩溃,没有打印出关于为什么会发生这种情况的更多信息。
当我单步执行我的代码时,调试器会在处理程序的入口处命中一个断点——例如,在try
块内,但Log.Error
在行之前。但是,尝试比这一点更进一步会导致应用程序立即崩溃,而不会Log.Debug
执行 try OR catch 块中的任何一行 - 没有任何内容打印到 ADB Logger。此外,打印到 ADB 日志W/system.err
的错误只是我故意引起的错误(触发处理程序) - 没有提供有关处理程序内崩溃的信息。
有谁知道是什么导致了这次崩溃,或者甚至有关于如何从 ADB 日志中获取更多关于处理程序中的崩溃是由什么引起的信息的建议?我唯一的思路是,因为我的应用程序是 WebView 应用程序,WebView 本身可能会以某种方式消耗异常?任何帮助是极大的赞赏!