今天在调试同事的一段代码时,发现有一段代码调试时怎么也进不去,难道遇到了Visual Studio的调试禁区?
简化后的代码如下:
class Program
{
static void Main(string args)
{
SimpleClass simpleClass = new SimpleClass();
string myString = simpleClass.OneField;
}
}
public class SimpleClass
{
private string _oneField = string.Empty;
public string OneField
{
get
{
if (_oneField.Length == 0)
{
_oneField = GetMyString();
}
return _oneField;
}
}
private string GetMyString()
{
return "just for test~";
}
}无法调试的代码即“_oneField = GetMyString();”这一行。
大家可以自行调试,会发现是因为_oneField这个变量总是被莫名其妙的赋上值了,但明明我们还没有给它赋值……
和同事讨论过后,还是没有得出明确的结论,只是推测可能是因为Visual Studio在调试的过程中,自动扫描对象中的属性,然后自行运行属性的get操作~
不知道大家有没有遇到这种情况,虽然最终通过把OneField属性改写成函数解决了这个
问题,但还是有些不爽,难道在Visual Studio就真的没有办法调试如上代码?
更新:
在Angel Lucifer的提醒下,我重新试了下,进一步发现了问题所在:
如果在“SimpleClass simpleClass = new SimpleClass();”这一行加上断点,然后逐行调试,是无法到达“_oneField = GetMyString();”这一行的;
但如果直接F5,则可以到达“_oneField = GetMyString();”这一行。。。
进一步更新:
本以为以上发现的问题不会影响程序运行的结果,但却意外发现有时也会影响到程序最终运行的结果——代