最近出现一怪事:调试时断点不匹配,而且找不到标识符
例如:
void Foo()
{
int a=SomeMethod();//断点在这一行
Console.WriteLine("OK");
}
我把断点设在第一行,调试时居然自动跑到第二行去了;而且我想在监视窗口中看一下a的值,结果提示我当前上下文不存在名称a
类似的问题出现好几次了,我的感觉就是符号文件出问题了,Clean之后问题依旧
今天又遇到这个问题了,突然一想,会不会是因为编译成Release的原因呢?(手头这个项目之前已经完成了,最近有点改动,所以没有改成Debug版本)
试了一下,果然如此。
其实早就知道Release会进行代码优化,不过以前一直没注意到。
在这里,编译器认为变量a未被使用,所以将其优化掉了(但实际上这条语句是有用的,因为函数调用可能有副作用,比如DateTime.Now每次的调用结果就不同,所以如果直接在监视窗口里多次看函数的返回值的话,就可能产生问题),于是就找不到名称了,并且断点也自动下移了