English 中文(简体)
夸张如何获得关于一物体的类型信息,该物体最初被定为无效?
原标题:How does the debugger get type information about an object initialized to null?

If an object is initialized to null, it is not possible to get the type information because the reference doesn t point to anything.

然而,当我 de倒和我 h倒一个变数时,它显示了信息的类型。 只显示静态方法,但似乎仍然知道这种方法。 甚至在释放时也建了建筑。

夸张是否使用其他信息,只是某种反映,以发现数据类型? 它比我知道多了吗? 如果知道这一点,那么为什么它能够NulReferenceException<<<>>>>/a>上查找数据类型?

最佳回答

似乎你把提及类型与提及价值类型混为一谈。 参赛者可以轻易获得DLL元数据。 与此相关的亚洲开发银行还储存着一种临时信息,即挖掘杠杆作用,以提供更好的经验。 因此,即使没有提及,变相者也可确定诸如类型和名称等信息。

http://code>NullReferenceException。 也可以告诉你,它正在寻找一种外地/方法的类型。 我不熟悉《刑法》这一部分的内涵,但似乎没有内在的理由可以不这样做。

但是,我不敢肯定,《刑法》的附加成本将是有益的。 我同样感到沮丧的是,没有资料说明一个无效的例外。 但是,我只想说什么名字! 我不关心的是它是一个<代码>IComparable,即想知道它是ftCustomer

姓名是一些先天,《刑法》并不总是能够查阅,因为其中相当一部分人生活在《刑法》中,而不是元数据。 因此,它可以为他们提供极大的可靠性(或速度)

问题回答

口头回答当然是正确的。 仅增加一点:

当I debug和I对变数进行控制时,它显示了信息的类型。

权利。 你们有一 bow。 bow被贴上“FRUIT”。 头巾是空的。 谷物的类型如何? 不能说,因为 bow有 fruit。 但是,这并不意味着你对therkl一无所知。 你们知道,宝石可以含有任何果实。

当你背上variable时,浮标可以告诉你变数本身或内容。

夸张是否使用其他信息,只是某种反映,以发现数据类型?

绝对。 夸张不仅需要知道,而且需要知道这一参考文件中提到的事项类型,而且还需要对可以储存在上的物品施加限制。 关于对特定储存地点实行何种限制的所有信息,都知道时间,操作时间可以告诉变压者。

它比我知道多了吗?

I reject the premise of the question. The debugger is running on your behalf; it cannot do anything that you cannot do yourself. If you don t know what the type restriction on a particular variable is, it s not because you lack the ability to find out. You just haven t looked yet.

如果它知道这一点,那么它为什么无法在“NllReferenceException”中显示数据类型?

想一想一下,当你不予考虑时,实际发生什么。 举例来说,你这样做:

Fruit f = null;
string s = f.ToString();

谷物中可能超载。 哪一部法律必须产生? 让我们相信,地方变量 f储存在一个堆积地点。 垃圾主说:

  • copy the contents of the memory address at the stack pointer offset associated with f to register 1
  • The virtual function table is going to be, lets say eight bytes from the top of that pointer, and ToString is going to be, let s say, four bytes from the top of that table. (I am just making these numbers up; I don t know what the real offsets are off the top of my head.) So, start by adding eight to the current contents of register 1.
  • Now dereference the current contents of register 1 to get the address of the vtable into register 2
  • Now add four bytes to register 2
  • Now we have a pointer to the ToString method...

但是,在一分钟内,请允许我再次遵循这一逻辑。 第一步将零列入登记册1,因为f 含有零。 第二步增加了8个。 第三个步骤是贴画0x00000008,虚拟记忆系统是一个例外,指出非法的记忆页刚刚被触动。 《刑法》处理这一例外情况,确定这一例外发生在第一个64K记忆中,并相信有人刚刚放弃了一个无效点。 因此,它造成了一个完全的参考性例外。

虚拟记忆系统肯定不明白,它贬低了0x00008点的理由是有人试图打着f.ToString()。 这一信息过去已经消失;记忆管理者的工作是告诉你你你你,你没有权利接触的东西;why。 你们试图与你们相见,并不是说自己的事情。

南极海生委可以维持一个单独的侧面数据结构,这样每当你获得记忆时,它就说明你为什么试图这样做。 这样,该例外就可以得到更多的信息,说明在例外情况发生时你正在做什么。 为every获取记忆提供这种数据结构的费用! 管理守则可能比今天要低十倍,而成本则像按破碎的代码一样通过正确编码承担。 什么? 告诉你你你你可以轻率地 figure出的东西:这种变数含有你不喜欢的错误。

该特征不值得付出代价,因此《刑法》没有这样做。 没有任何技术原因无法做到;它只是不切实际的。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签