比如语句
if(cnt ==0)
{
t1 =TSCL;
t2 = TSCH;
}
而,cnt其实是一直在加一的,也就是if条件其实只满足一次,而如果在t1 = TSCL处设置断点,看着cnt在一直加1,不等于0,却能不断的进入断点,为什么?
是不是这几句被优化掉了,像僵尸一样。但是我能看到t1,t2被赋了一次值,也就是没被优化掉,再进入断点值就不变了,也就是虽然进入断点,赋值已经不起作用了,这是为什么,请专家解答一下,是不是我优化设置的不对,我设置的是o2优化,o1,o3也是一样情况。o0没这个问题,只进入一次。-g也开了。
Allen35065:
cnt定义需要volatile关键字。
也可能是有代码的其它错误,需要看生成的汇编。
user4675912:
回复 Allen35065:
我加了volatil,一样。我觉得开优化后,调试真的不方便,有很多指令连顺序都改变了,断点根本无法定位,不知道怎么解决。不过不愿舍弃优化,速度真的是快很多。
Allen35065:
回复 user4675912:
优化编译是会产生代码乱序的,但是结果是不会有问题。 一般还是代码本身存在一些问题引起的。
通常全局变量不会被优化掉,你可以在代码里加一些全局变量来进行调试,当然不要在待优化的循环里加,会破坏循环的流水。