如何找到引发“ NullReferenceException:'对象引用未设置为对象实例的方法'?”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何找到引发“ NullReferenceException:'对象引用未设置为对象实例的方法'?”相关的知识,希望对你有一定的参考价值。

Exception popup

我已经检查了Stackoverflow上的每个类似问题。他们都没有回答或者没有真正问过同样的问题。

是否可以找到尝试引用所述空对象的方法?我知道它不能说什么对象,因为它不知道,但是它必须知道哪种方法正在尝试null引用,但不会显示它。在调试模式下,代码屏幕显示:

“您的应用已进入中断状态,但是由于所有线程都在执行外部代码(通常是系统代码或框架代码),所以没有任何代码可显示。”

我点击继续执行以读取输出并从那里找到它,但是输出中没有任何相关内容:

**System.NullReferenceException:** 'Loading...'

Thread finished: <Thread Pool> #4
The thread 0x4 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #5
The thread 0x5 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #2
The thread 0x2 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #3
The thread 0x3 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #6
The thread 0x6 has exited with code 0 (0x0).
Thread started: <Thread Pool> #7
Thread started: <Thread Pool> #8
Thread started: <Thread Pool> #9
11-06 14:17:23.932 D/Mono    ( 5445): DllImport attempting to load: '/system/lib/liblog.so'.
11-06 14:17:23.933 D/Mono    ( 5445): DllImport loaded library '/system/lib/liblog.so'.
11-06 14:17:23.933 D/Mono    ( 5445): DllImport searching in: '/system/lib/liblog.so' ('/system/lib/liblog.so').
11-06 14:17:23.933 D/Mono    ( 5445): Searching for '__android_log_print'.
11-06 14:17:23.933 D/Mono    ( 5445): Probing '__android_log_print'.
11-06 14:17:23.933 D/Mono    ( 5445): Found as '__android_log_print'.
11-06 14:17:23.936 I/MonoDroid( 5445): UNHANDLED EXCEPTION:
11-06 14:17:23.938 I/MonoDroid( 5445): System.NullReferenceException: Object reference not set to an instance of an object.
11-06 14:17:23.938 I/MonoDroid( 5445):   at Xamarin.Forms.Grid.NumberOfUnsetRowHeight (Xamarin.Forms.BindableObject child) [0x00014] in D:a1sXamarin.Forms.CoreGridCalc.cs:627 
11-06 14:17:23.938 I/MonoDroid( 5445):   at Xamarin.Forms.Grid.MeasureStarredRows () [0x0007b] in D:a1sXamarin.Forms.CoreGridCalc.cs:545 
11-06 14:17:23.938 I/MonoDroid( 5445):   at Xamarin.Forms.Grid.MeasureAndContractStarredRows (System.Double width, System.Double height, System.Double totalStarsHeight) [0x00000] in D:a1sXamarin.Forms.CoreGridCalc.cs:405 
11-06 14:17:23.938 I/MonoDroid( 5445):   at Xamarin.Forms.Grid.MeasureGrid (System.Double width, System.Double height, System.Boolean requestSize) [0x00117] in D:a1sXamarin.Forms.CoreGridCalc.cs:512 
11-06 14:17:23.938 I/MonoDroid( 5445):   at Xamarin.Forms.Grid.OnSizeRequest (System.Double widthConstraint, System.Double heightConstraint) [0x0002a] in D:a1sXamarin.Forms.CoreGridCalc.cs:60 
11-06 14:17:23.938 I/MonoDroid( 5445):   at Xamarin.Forms.VisualElement.OnMeasure (System.Double widthConstraint, System.Double heightConstraint) [0x00000] in D:a1sXamarin.Forms.CoreVisualElement.cs:762 
11-06 14:17:23.938 I/MonoDroid( 5445):   at Xamarin.Forms.VisualElement.GetSizeRequest (System.Double widthConstraint, System.Double heightConstraint) [0x00053] in D:a1sXamarin.Forms.CoreVisualElement.cs:644 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Layout.GetSizeRequest (System.Double widthConstraint, System.Double heightConstraint) [0x00000] in D:a1sXamarin.Forms.CoreLayout.cs:132 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.VisualElement.Measure (System.Double widthConstraint, System.Double heightConstraint, Xamarin.Forms.MeasureFlags flags) [0x00054] in D:a1sXamarin.Forms.CoreVisualElement.cs:702 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.StackLayout.CalculateNaiveLayout (Xamarin.Forms.StackLayout+LayoutInformation layout, Xamarin.Forms.StackOrientation orientation, System.Double x, System.Double y, System.Double widthConstraint, System.Double heightConstraint) [0x000a8] in D:a1sXamarin.Forms.CoreStackLayout.cs:163 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.StackLayout.CalculateLayout (Xamarin.Forms.StackLayout+LayoutInformation layout, System.Double x, System.Double y, System.Double widthConstraint, System.Double heightConstraint, System.Boolean processExpanders) [0x00058] in D:a1sXamarin.Forms.CoreStackLayout.cs:123 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.StackLayout.LayoutChildren (System.Double x, System.Double y, System.Double width, System.Double height) [0x0004e] in D:a1sXamarin.Forms.CoreStackLayout.cs:58 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Layout.UpdateChildrenLayout () [0x00158] in D:a1sXamarin.Forms.CoreLayout.cs:266 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Layout.OnSizeAllocated (System.Double width, System.Double height) [0x0000f] in D:a1sXamarin.Forms.CoreLayout.cs:224 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.VisualElement.SizeAllocated (System.Double width, System.Double height) [0x00000] in D:a1sXamarin.Forms.CoreVisualElement.cs:784 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Layout.ForceLayout () [0x00000] in D:a1sXamarin.Forms.CoreLayout.cs:125 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Platform.Android.ViewCellRenderer+ViewCellContainer.Update (Xamarin.Forms.ViewCell cell) [0x00185] in D:a1sXamarin.Forms.Platform.AndroidCellsViewCellRenderer.cs:178 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Platform.Android.ViewCellRenderer.GetCellCore (Xamarin.Forms.Cell item, Android.Views.View convertView, Android.Views.ViewGroup parent, Android.Content.Context context) [0x00027] in D:a1sXamarin.Forms.Platform.AndroidCellsViewCellRenderer.cs:21 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Platform.Android.CellRenderer.GetCell (Xamarin.Forms.Cell item, Android.Views.View convertView, Android.Views.ViewGroup parent, Android.Content.Context context) [0x00075] in D:a1sXamarin.Forms.Platform.AndroidCellsCellRenderer.cs:51 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Platform.Android.CellFactory.GetCell (Xamarin.Forms.Cell item, Android.Views.View convertView, Android.Views.ViewGroup parent, Android.Content.Context context, Xamarin.Forms.View view) [0x0001e] in D:a1sXamarin.Forms.Platform.AndroidCellsCellFactory.cs:20 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Xamarin.Forms.Platform.Android.ListViewAdapter.GetView (System.Int32 position, Android.Views.View convertView, Android.Views.ViewGroup parent) [0x00200] in D:a1sXamarin.Forms.Platform.AndroidRenderersListViewAdapter.cs:299 
11-06 14:17:23.939 I/MonoDroid( 5445):   at Android.Widget.BaseAdapter.n_GetView_ILandroid_view_View_Landroid_view_ViewGroup_ (System.IntPtr jnienv, System.IntPtr native__this, System.Int32 position, System.IntPtr native_convertView, System.IntPtr native_parent) [0x0001a] in <11a340ccc8de43f09c97400139266ef5>:0 
11-06 14:17:23.939 I/MonoDroid( 5445):   at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.68(intptr,intptr,int,intptr,intptr)
11-06 14:17:23.950 W/.TheStylingRoo( 5445): JNI RegisterNativeMethods: attempt to register 0 native methods for android.runtime.JavaProxyThrowable
11-06 14:17:23.954 D/Mono    ( 5445): DllImport searching in: '__Internal' ('(null)').
11-06 14:17:23.955 D/Mono    ( 5445): Searching for 'java_interop_jnienv_throw'.
11-06 14:17:23.955 D/Mono    ( 5445): Probing 'java_interop_jnienv_throw'.
11-06 14:17:23.955 D/Mono    ( 5445): Found as 'java_interop_jnienv_throw'.
**System.NullReferenceException:** 'Object reference not set to an instance of an object.'

这个让我难过。尝试加载显示客户列表的页面和另一个加载预订的页面时,异常触发。请注意,启动页面具有加载当前预订列表的相同逻辑,并且工作正常。

我已经搜索了每个相关问题,并尝试了以下解决方案:

  • 单步执行代码。它在2个页面构造器中的任何一个结束时触发,不包括启动页面构造器。这些构造函数中的所有方法都可以正常执行。
  • 寻找空值。没有对象或属性为null。
  • 评论,尝试捕捉,如果!的话。这三个都不能阻止该异常。
  • 重新创建XAML事件。我确定是这个,但是不。
  • 查看异常详细信息。异常弹出窗口根本没有任何详细信息。
  • 更改异步方法。显示预订的启动视图实际上是复本,包括异步方法。效果很好。
  • 删除绑定。
  • 清理,重建,恢复Android仿真器的出厂设置。各种订单
  • 重新启动Visual Studio
  • 删除bin文件夹并重新加载

相关代码:

MainPage.xaml.cs(仅是加载ClientsPage的事件)

private async void Button_Clicked(object sender, EventArgs e)
        {
            try
            {
                await Navigation.PushAsync(new Clients_Page());
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex);
            }
        }

Clients_Page.xaml.cs(仅是构造函数)

public partial class Clients_Page : ContentPage
    {
        public Clients_Page()
        {
            InitializeComponent();
            Clients_ViewModel viewModel = new Clients_ViewModel();
            viewModel.LoadClients(); 
            BindingContext = viewModel;
// Commenting all but InitializeComponent (Including Bindings in xaml) has no effect, so the ViewModel is not to blame
        } // EXCEPTION FIRES AFTER THIS LINE

Clients_ViewModel.cs

class Clients_ViewModel : INotifyPropertyChanged
    {
        //PROPERTIES_________________________________________________________
        public event PropertyChangedEventHandler PropertyChanged;
        private IRepository database { get; }
        private ObservableCollection<Client> clients;
        public ObservableCollection<Client> Clients
        {
            get { return clients; }
            set
            {
                if (value != clients)
                {
                    clients = value;
                    if (PropertyChanged != null)
                    {
                        NotifyPropertyChanged("Clients");
                    }
                }
            }
        }

        public async void LoadClients()
        {
                Clients = new ObservableCollection<Client>(await database.GetAllClients());

        }

        private void NotifyPropertyChanged(String propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (null != handler)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public Clients_ViewModel()
        {
            database = App.Database_IRepository;
        }

    }//endclass
}//endnamespace

Repository.cs(仅GetAllClients任务)

        public async Task<List<Client>> GetAllClients()
        {
            return await database.Table<Client>().OrderBy(c => c.FirstName).ToListAsync();
        }

Xaml只是使用ItemsSource =“ {Binding Clients}”的ListView和使用Text =“ {Binding FirstName}”的ViewCell的列表视图>

我精通调试,并且会很有趣地使用空对象引用定位该方法。我只需要知道如何使调试器显示上述方法即可。

更新1:即使删除了xaml中的所有绑定并且删除了对viewmodel的调用,也会触发异常。我也尝试注释除了ContentPage和主网格之外的整个Clients_Page.xaml,并且仍然会引发错误。因此它不能是ViewModel或xaml

更新2:即使将click事件更改为导航到新的页面,也会发生错误

异常弹出窗口,我已经检查了Stackoverflow上的每个类似问题。他们都没有回答或者没有真正问过同样的问题。有没有办法找到尝试引用的方法...

答案

已解决

以上是关于如何找到引发“ NullReferenceException:'对象引用未设置为对象实例的方法'?”的主要内容,如果未能解决你的问题,请参考以下文章

如何在OnExceptionAsync c#中获取引发异常的方法名称[重复]

引发 CORBA 异常:未找到

双向链表 - 是啥导致我的代码引发编译器错误,我该如何解决?

Appdomain.Load(AssemblyName) 引发文件未找到异常

如果未找到任何内容,Object.get() 将引发异常 [重复]

Spring-boot,无法自动装配类。未找到默认构造函数引发异常