2014-10-22 76 views
3

调试在Visual Studio中的一些异步代码,当我遇到一个奇怪的问题,因为空: enter image description here实例化局部变量显示调试检查

正如你可以看到我有一个for循环,在一个IEnumerable 9个迭代实例化对象(可怕的命名我知道,不是我的DB ...) i在这种情况下是0,所以elementAt应该把第一项放在betaling变量。 出现这种情况正确,而这种代码执行完美,但在调试器中它显示为空:

enter image description here

当我继续调试,一切正常,betaling变量的多行代码被使用,是正确保存到数据库,所以它只是我的调试检查器显示对象为空。当你在调试的时候,这是相当令人恼火的,因为你看不到任何东西。 我怀疑这必须做一些与异步等待。在这个循环之前有多个数据库等待。并且循环中betaling对象的保存也是一种等待方法。当我尝试重现然而,在一个测试项目这种行为,一切工作正常..

我知道你可以在异步方法其它威胁访问属性的问题,我打电话从VM这个代码,但随后为什么我可以检查清单?我怀疑这是一个错误,如果不是这肯定是一个奇怪的'功能'能够遵循的代码行,但不能够检查一些属性..

我测试了这个VIsual Studio 2012和2013,两者都有相同的行为。

+1

你能张贴小,但完整的代码示例,我们可以看到这个问题? – svick 2014-10-23 01:20:21

+1

我也看到这个。我有VS 2013 Ultimate + Update 5 – Nayan 2015-08-31 07:07:42

+0

出于好奇,你在你的代码中使用任何IL?大多数ORM使用IL,因此您不必亲自编写它,以便将其呈现在您的代码库中。我试图缩小可能的原因,这篇文章可能是相同的问题,并且用户也使用IL:http://stackoverflow.com/q/15116210/1085837 – 2015-08-31 14:06:51

回答

1

我看到这两个VS 2015年更新3和VS 2017

作为工作的时候,我发现,使用鼠标悬停/点击“运行执行到这里保存的实例值,其中,键盘加速器('Ctrl + Shift + F10')会将实例化的值清空。

VS mouse hover 'Run execution to here'

+0

您是否在任何地方使用IL?我的数据库调用使用Dapper,它使用了大量的IL。我试图缩小这个问题的范围,所以我可以为这个 – 2017-03-30 07:05:15

+0

做一个'官方'的支持电话,我没有使用IL。 – ergohack 2017-03-30 18:38:42