C# Xamarin在布局根页面(Platform.LayoutRootPage)时形成错误诊断
在处理以Xamarin表单编写的应用程序时,我经常看到以下导致应用程序崩溃的异常:C# Xamarin在布局根页面(Platform.LayoutRootPage)时形成错误诊断,c#,xamarin.forms,xamarin.android,C#,Xamarin.forms,Xamarin.android,在处理以Xamarin表单编写的应用程序时,我经常看到以下导致应用程序崩溃的异常: 11-16 11:00:40.009 I/MonoDroid(16094): UNHANDLED EXCEPTION: 11-16 11:00:40.113 I/MonoDroid(16094): System.NullReferenceException: Object reference not set to an instance of an object. 11-16 11:00:40.113 I/Mon
11-16 11:00:40.009 I/MonoDroid(16094): UNHANDLED EXCEPTION:
11-16 11:00:40.113 I/MonoDroid(16094): System.NullReferenceException: Object reference not set to an instance of an object.
11-16 11:00:40.113 I/MonoDroid(16094): at Xamarin.Forms.Platform.Android.AppCompat.Platform.LayoutRootPage (Xamarin.Forms.Page page, System.Int32 width, System.Int32 height) [0x0000c] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:290
11-16 11:00:40.113 I/MonoDroid(16094): at Xamarin.Forms.Platform.Android.AppCompat.Platform.Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout (System.Boolean changed, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x00003] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:199
11-16 11:00:40.113 I/MonoDroid(16094): at Xamarin.Forms.Platform.Android.PlatformRenderer.OnLayout (System.Boolean changed, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x0000e] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\PlatformRenderer.cs:73
11-16 11:00:40.113 I/MonoDroid(16094): at Android.Views.ViewGroup.n_OnLayout_ZIIII (System.IntPtr jnienv, System.IntPtr native__this, System.Boolean changed, System.Int32 l, System.Int32 t, System.Int32 r, System.Int32 b) [0x00008] in <e975227ac8644a30bb0866117325de0d>:0
11-16 11:00:40.113 I/MonoDroid(16094): at (wrapper dynamic-method) System.Object:55caff06-7828-42f0-9580-cfb6673c4b5a (intptr,intptr,bool,int,int,int,int)
但这些事件都不会在异常发生时触发。有人知道为什么吗
有没有办法获得更多信息
您可以使用:
图为:
但这些事件都不会在异常发生时触发
如果该错误是您的XAML
有问题,则它是一个编译错误,它无法触发您的异常处理程序
有没有办法获得更多信息
您可以使用:
图为:
但这些事件都不会在异常发生时触发
如果该错误是您的
XAML
有问题,则它是一个编译错误,它无法触发您的异常处理程序
,这不是生成问题。这是一个运行时问题。应用程序生成正确,但在启动时(无论是在模拟器上还是在设备上),它会崩溃,并报告引用未设置异常。@spatialguy,请共享诊断MSBuild输出好吗?我们需要查看一些错误日志以帮助您查明问题。@spatialguy,您是否尝试使用调试器查找哪一行正在崩溃?有人找到了解决方案吗?这不是生成问题。这是一个运行时问题。应用程序生成正确,但在启动时(无论是在模拟器上还是在设备上),它会崩溃,并报告引用未设置异常。@spatialguy,请共享诊断MSBuild输出好吗?我们需要查看一些错误日志来帮助您查明问题。@spatialguy,您是否尝试使用调试器来查找哪一行正在崩溃?有人找到了解决方案吗?有没有解决方案@spatialguy?有没有解决方案@spatialguy??
protected override async void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
...
RegisterExceptionHandlers();
...
}
private void RegisterExceptionHandlers()
{
TaskScheduler.UnobservedTaskException += UnobservedException;
AppDomain.CurrentDomain.UnhandledException += UnhandledException;
AndroidEnvironment.UnhandledExceptionRaiser += UnhandledExceptionRaiser;
}
private void UnhandledException(object source, UnhandledExceptionEventArgs args)
{
Log.Error("Domain Exception from {source}: {exception}", source, args.ExceptionObject?.ToString() ?? "N/A");
}
private void UnobservedException(object source, UnobservedTaskExceptionEventArgs args)
{
Log.Error("TaskSchedulerException: {source} {exception}", source, args);
if (!args.Observed)
args.SetObserved();
}
private void UnhandledExceptionRaiser(object source, RaiseThrowableEventArgs args)
{
Log.Error("Exception from {source}: {exception}", source, args.Exception?.ToString() ?? "N/A");
}