C# System.NullReferenceException的源

C# System.NullReferenceException的源,c#,nullreferenceexception,C#,Nullreferenceexception,我正在为一个web商店实现一个错误记录器,只在特定类中记录一个NullReferenceException只在一定程度上有用。我对如何防止异常并不感兴趣,因为我知道这一点,但有时它仍然会发生,因此错误记录器 然后问题是:如何在所有异常信息中找到System.NullReferenceException的源。确保记录完整的堆栈跟踪。假设您已打开调试信息(没有理由不打开web应用程序…),您应该能够找到导致问题的线路 当然,如果您具备以下条件,这并不总能为您提供所需的所有信息: if (foo.Ba

我正在为一个web商店实现一个错误记录器,只在特定类中记录一个NullReferenceException只在一定程度上有用。我对如何防止异常并不感兴趣,因为我知道这一点,但有时它仍然会发生,因此错误记录器


然后问题是:如何在所有异常信息中找到System.NullReferenceException的源。

确保记录完整的堆栈跟踪。假设您已打开调试信息(没有理由不打开web应用程序…),您应该能够找到导致问题的线路

当然,如果您具备以下条件,这并不总能为您提供所需的所有信息:

if (foo.Bar.Baz && person.Address.Road.Length)
在一行中。。。但这是你最好的出发点

此外,将参数验证添加到方法中可以使确定错误更加简单。就我个人而言,我是这方面的助手方法的粉丝。例如,在野田佳彦时间,我们有,所以我可以打电话:

Preconditions.CheckNotNull(foo, "foo");
(它还返回
foo
的值,这在将参数复制到字段中的构造函数中非常方便)


越早检测到意外的空引用越好。

确保记录完整的堆栈跟踪。假设您已打开调试信息(没有理由不打开web应用程序…),您应该能够找到导致问题的线路

当然,如果您具备以下条件,这并不总能为您提供所需的所有信息:

if (foo.Bar.Baz && person.Address.Road.Length)
在一行中。。。但这是你最好的出发点

此外,将参数验证添加到方法中可以使确定错误更加简单。就我个人而言,我是这方面的助手方法的粉丝。例如,在野田佳彦时间,我们有,所以我可以打电话:

Preconditions.CheckNotNull(foo, "foo");
(它还返回
foo
的值,这在将参数复制到字段中的构造函数中非常方便)


越早检测到意外的空引用越好。

如果我正确理解了问题,请在Visual Studio中转到“调试>异常”,并选中所有选项以引发异常。这将允许您查看调试时抛出的所有内容。您可以使用InnerException的内容来确定导致错误的根位置

如果我正确理解了问题,请在Visual Studio中,转到调试>异常,并选中所有选项以引发异常。这将允许您查看调试时抛出的所有内容。您可以使用InnerException的内容来确定导致错误的根位置

“据我所知,我对如何防止异常并不感兴趣”?除非您有特定的理由手动处理日志记录,否则我建议您研究.NET内置的HealthMonitoring功能。然后,如果您需要额外的信息,只需实现一个自定义的“WebErrorEvent”。如果这是您想探索的路线,请让我知道,我在github上有一些示例“我对如何防止异常并不感兴趣,因为我知道”?除非您有特定的理由手动处理日志记录,否则我建议您研究.NET内置的健康监控功能。然后,如果您需要额外的信息,只需实现一个自定义的“WebErrorEvent”。如果这是一条你想探索的路线,让我知道,我在github上有一些示例