C# CLR调试器和';var';

C# CLR调试器和';var';,c#,.net,debugging,C#,.net,Debugging,我正在使用CLR调试器(版本8,来自“VisualStudio2005”)调试一些C#代码。我可以单步执行代码,但对于许多变量,调试器不会显示其值。也就是说,如果我在“立即”框中键入它或将其添加到“监视”框中,它会显示“无法计算表达式” 对于var变量,它似乎做了很多,但对于参数和属性,我也看到了它。我还没有弄清楚这种模式是什么 是否有规则规定何时可以显示变量的值?我是否需要对代码或构建脚本执行某些操作,以使调试器能够查看变量?或者是否存在隐藏的调试器设置?该变量必须位于到达断点的点的作用域中。

我正在使用CLR调试器(版本8,来自“VisualStudio2005”)调试一些C#代码。我可以单步执行代码,但对于许多变量,调试器不会显示其值。也就是说,如果我在“立即”框中键入它或将其添加到“监视”框中,它会显示“无法计算表达式”

对于
var
变量,它似乎做了很多,但对于参数和属性,我也看到了它。我还没有弄清楚这种模式是什么


是否有规则规定何时可以显示变量的值?我是否需要对代码或构建脚本执行某些操作,以使调试器能够查看变量?或者是否存在隐藏的调试器设置?

该变量必须位于到达断点的点的作用域中。也就是说,如果您打断一个方法,您应该能够在包含类中看到该方法的参数、局部变量和静态变量


关于
var
,该“编译器技巧”是与Visual Studio 2008一起引入的,因此尽管您可以在.NET 2.0项目中使用它,但我认为VS2005无法编译它,因此我怀疑它是否能够调试它。

您的问题中缺少一些关键信息。逆向工程:“var”关键字直到visualstudio2008附带的C#version3才可用。使用旧的调试器不是一个好主意,尽管它可能不是真正的问题


另一个提示是使用独立的调试器,而不是内置在VisualStudio中的调试器。使您很可能正在调试发行版代码,而不是调试配置中构建的代码。不获取局部变量和属性的信息是很正常的,在这种情况下,JIT编译器会对它们进行优化。

在这个问题上,没有足够的信息来危害诊断。你能给我们举一个、两个或几十个无法计算的表达式的例子吗?一个小程序就好了。你是在释放模式下运行吗?在调试模式下运行程序,然后重试。
var
只是告诉编译器根据使用情况推断类型。一旦代码被编译,就没有
var
的痕迹,所以我看不出这会以任何方式影响调试。布赖恩:是的,这也是我的想法。此外,对于那些显然具有非常显式类型(如参数和属性)的表达式,我看到了“无法计算表达式”
var
只是一个想法,因为它们似乎是我看到的最常见的情况。