【问题标题】:Is there any way to find out which object caused the NullReferenceException?有什么方法可以找出导致 NullReferenceException 的对象?
【发布时间】:2011-08-08 09:25:38
【问题描述】:

有什么方法可以找到导致控件从 NullReferenceException 流入 catch 块的对象名称,以便我们可以通过发出警报或记录为 null 的对象来轻松调试?

【问题讨论】:

  • 我希望有,但我从未见过任何东西。不知道为什么它不在现代调试器中,希望有人可以阐明。我能做的最好的就是使用大量的断点,单步执行,缩小范围,把家放在歹徒身上......
  • 最好的方法是使用Guard ClassesCode Contracts来防止这种异常。有关详细信息,请参阅this 问题。
  • 根据定义,no 对象导致了异常...

标签: c# asp.net


【解决方案1】:

没有。
您只能获得包括行号在内的堆栈跟踪。
这可以在以下简单情况下为您提供帮助:

var result = myString.Trim();

但它对这样的行没有帮助:

var result = myObj.Method1().Method2();

【讨论】:

    【解决方案2】:

    (注意:答案是针对原始问题,在事实发生四年后对其进行编辑之前)

    什么对象的名称?对于我们程序员来说,它是一个设计时标记,用于标识对象引用,但它只有在编译之前才有意义。

    有些对象有一个专用的Name 属性,但它与代码中对象引用的名称没有(也不应该)有任何关系,在 Name 属性之后命名对象引用是视觉设计师的礼貌,但是这是约定而不是要求。此外,空引用不能仅仅因为引用为 null 而具有 Name 属性,它还没有分配给任何具有可读 Name 的对象。

    【讨论】:

    • 你本可以只写第一句话并获得秘密的“Philosoprogrammer”徽章;)
    • 重点不是要对身份进行哲学思考 :),而是要表明从根本上无法做到这一点,因为编译后的代码不关心本地 var 的名称,它只是一个对象引用。
    【解决方案3】:

    好吧,您可以查看堆栈跟踪、反映函数并显示参数并根据堆栈状态进行猜测,但我会说不是真的,因为对象可能位于函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2020-05-18
      • 2014-08-14
      相关资源
      最近更新 更多