提问人:user33276346 提问时间:5/2/2020 最后编辑:user33276346 更新时间:5/2/2020 访问量:1166
C# 空引用异常,如何在指定行中发现罪魁祸首
C# null reference exception, how to spot the culprit in the specified line
问:
我们都厌倦了这种例外,但是有没有办法快速找到有问题的东西呢?通常,这种异常会抛出这样的一行:
var myVar = somethingUninitallized.property;
很容易看出,作业的右侧是原因。但是,有时线条很长,如下所示:
var myVar = x.DoSomething(y.FirstDoThis(isThisInitiallized).aProperty, z.ThenDoThis(whatAboutThis).anotherProperty).ComplicatingThings().thisHappensSometimes;
我们在那条线上得到了例外。是的,我们本可以以不同的方式编写代码,但可能我们正在调试其他人的代码,修改它需要重新编译 15 分钟、需要授权或任何其他障碍。这是一个微不足道的例子,我也可以想到 linq,但肯定还有其他更复杂的场景。我通常在 2020 年逐一检查每件事。
是否不可能从调试器工具中获得,或者以某种方式,这是空引用的东西?
答:
3赞
Rufus L
5/2/2020
#1
下面是从 Thomas Ardel 编写的 Debugging System.NullReferenceException 复制的答案:
在 Visual Studio 中使用 Null 引用分析
如果使用的是 Visual Studio 2017 或更高版本,则可以使用“空引用分析”功能。这样一来,Visual Studio 就可以准确地显示什么是 null。让我们使用这个方法链的例子:
var street = service.GetUser().Address.Street;
要启用分析,请转到“调试”|”视窗 |例外设置。选中公共语言运行时异常(如果尚未选中)或扩展节点并检查您感兴趣的异常。
在这种情况下,可以检查 System.NullReferenceException。运行代码时,调试器会中断,您现在会看到“引发的异常”窗口:NullReferenceException
瞧!窗口显示“ConsoleApp18.User.Address。get 返回 null”。这正是我们想看到的。
评论
0赞
user33276346
5/2/2020
棒!似乎由于某种原因,我的解决方案的调试器无法按预期工作 i.imgur.com/9RYqpfw.png。我在控制台应用程序中测试了它,它在那里工作,所以我必须进一步调查这个问题。
评论
var myVar = somethingUninitallized;
var myVar = somethingUninitallized.SomeProperty;
var myVar = somethingUninitallized;
NullReferenceException
o
null