【发布时间】:2017-09-07 19:42:28
【问题描述】:
假设你有这样的代码:
Human mario = HumanFactory.CreateRandomHuman();
Console.WriteLine(mario.GetFamily().GetFather().GetEyeColor());
假设你在调试模式下运行它,它显示该行得到一个System.NullReferenceException,错误消息'Object reference not set to an instance of an object.' 但你实际上并不知道哪个对象是空的。
有没有办法知道 Visual Studio 中实际上是哪个对象导致了引用异常?调试器只是将整行显示为导致异常,但您不知道mario 是否为null,或者GetFamily() 是否返回null,或者GetFather() 是否返回null,等等。
在过去,我只是将它分解成单独的行并逐步遍历它们,直到我得到 null 异常,但必须有一种更简单的方法来做到这一点,而不涉及破坏链。
【问题讨论】:
-
嗯,实际上在 VS 2017 中,未处理的异常弹出窗口告诉我哪个调用返回 null。这很方便!让我检查一下 2012 年......不,2012 年没有这样做。
-
选择
Mario,右键,快速观看。在 Quickwatch 窗口中,添加.GetFamily()并重新评估。继续直到找到空值。或者,暂时重写,直到发现错误。
标签: c# visual-studio debugging