我正在为网上商店实现一个错误记录器,并且仅在特定类中记录 NullReferenceException 仅对某个级别有用。我对如何防止异常并不感兴趣,因为我知道这一点,但有时它仍然会发生因此错误记录器。
那么问题来了:如何在所有异常信息中找到 System.NullReferenceException 的来源。
我正在为网上商店实现一个错误记录器,并且仅在特定类中记录 NullReferenceException 仅对某个级别有用。我对如何防止异常并不感兴趣,因为我知道这一点,但有时它仍然会发生因此错误记录器。
那么问题来了:如何在所有异常信息中找到 System.NullReferenceException 的来源。
确保记录完整的堆栈跟踪。假设您已打开调试信息(没有理由不使用 Web 应用程序...),您应该能够找到导致问题的线路。
当然,这并不总是为您提供所需的所有信息,如果您有:
if (foo.Bar.Baz && person.Address.Road.Length)
在一行中...但这是您将获得的最佳起点。
此外,向方法添加参数验证可以更简单地确定问题所在。就我个人而言,我是这个辅助方法的粉丝。例如,在 Noda Time 我们有Preconditions
,所以我可以调用:
Preconditions.CheckNotNull(foo, "foo");
(它还返回 的值foo
,这在将参数复制到字段中的构造函数中很方便)。
越早检测到意外空引用越好。
如果我正确理解了这个问题,请在 Visual Studio 中转到“调试”>“异常”,然后检查所有选项以引发异常。这将允许您查看调试时抛出的所有内容。您可以使用 InnerException 的内容来确定导致错误的根位置。