注意了,由于代码优化,可能导致调试时源代码不匹配

2 篇文章 0 订阅

最近出现一怪事:调试时断点不匹配,而且找不到标识符

例如:

 

void Foo()

{

int a=SomeMethod();//断点在这一行

Console.WriteLine("OK");

}

我把断点设在第一行,调试时居然自动跑到第二行去了;而且我想在监视窗口中看一下a的值,结果提示我当前上下文不存在名称a

 

类似的问题出现好几次了,我的感觉就是符号文件出问题了,Clean之后问题依旧

 

 

今天又遇到这个问题了,突然一想,会不会是因为编译成Release的原因呢?(手头这个项目之前已经完成了,最近有点改动,所以没有改成Debug版本)

 

试了一下,果然如此。

 

其实早就知道Release会进行代码优化,不过以前一直没注意到。

 

在这里,编译器认为变量a未被使用,所以将其优化掉了(但实际上这条语句是有用的,因为函数调用可能有副作用,比如DateTime.Now每次的调用结果就不同,所以如果直接在监视窗口里多次看函数的返回值的话,就可能产生问题),于是就找不到名称了,并且断点也自动下移了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值