instanciated局部变量在调试检查器中显示为null

时间:2014-10-22 07:13:19

标签: c# debugging async-await visual-studio-debugging

在visual studio中调试一些异步代码时遇到一个奇怪的问题: enter image description here

正如你所看到的,我有一个for循环遍历一个IEnumerable,其中包含9个实例化对象(糟糕的命名,我知道,不是我的数据库...) 在这种情况下,i为0,因此elementAt应将第一项放在betaling变量中。 这种情况正确发生,并且此代码执行完美,但在调试器中它显示为null:

enter image description here

当我继续调试时,一切正常,betaling变量用于多行代码并正确保存到DB中,因此只有我的调试检查器才将对象显示为null。然而,当你调试时,这是非常恼人的,因为你看不到任何东西.. 我怀疑这必须与异步等待做一些事情。在此循环之前有多个DB等待。并且循环中betaling对象的保存也是一种等待方法。当我尝试在测试项目中重现此行为时,一切正常..

我知道在异步方法中访问其他威胁的属性时可能会遇到问题,我从VM调用此代码,但为什么我可以检查列表?我怀疑这是一个错误,如果它不是它肯定是一个奇怪的“功能”能够遵循代码行,但无法检查一些属性..

我在VIsual Studio 2012和2013中对此进行了测试,两者都有相同的行为。

1 个答案:

答案 0 :(得分:1)

我在VS 2015 Update 3和VS 2017上看到了这一点。

作为一种解决方法,我发现使用鼠标悬停/点击“运行执行到这里”'保留实例化的值,其中键盘加速键(' Ctrl + Shift + F10')将使实例化的值无效。

VS mouse hover 'Run execution to here'