我有一个应用程序(已发布)和一个非常罕见的用户弹出的NullReferenceException,但我想要处理它。我已经查看了它中的堆栈和方法,并且找不到它会发生的具体位置(这是一个相当大的方法/算法)。现在我将使用try / catch围绕调用本身,但是如果我能弄明白的话,我想更好地处理它。
问题是,据我所知,NRE没有提供关于代码中具体内容导致它的线索。有没有办法甚至可以获得可能暗示原因的行号或任何其他信息?
答案 0 :(得分:2)
一些提示:
您可以通过检查其输入是否为null或其他无效值来开始每个方法,因此快速失败并显示有意义的消息。
private void DoSomething(int thingId, string value)
{
if(thingId <= 0) throw new ArgumentOutOfRangeException("thingId", thingId);
if(value == null) throw new ArgumentNullException("value");
...
}
您可以使用异常包装器包围每个方法,以便在堆栈跟踪的每个级别提供更多信息。
private void DoSomething(int thingId, string value)
{
try
{
...
}
catch (Exception e)
{
throw new Exception("Failed to Do Something with arguments " +
new {thingId, value},
e); // remember to include the original exception as an inner exception
}
}