TI中文支持网
TI专业的中文技术问题搜集分享网站

有2级优化编译后,debug是有些语句像僵尸一样,明明条件不满足,设断点也能进入,请教专家

比如语句

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:

优化编译是会产生代码乱序的,但是结果是不会有问题。 一般还是代码本身存在一些问题引起的。

通常全局变量不会被优化掉,你可以在代码里加一些全局变量来进行调试,当然不要在待优化的循环里加,会破坏循环的流水。

赞(0)
未经允许不得转载:TI中文支持网 » 有2级优化编译后,debug是有些语句像僵尸一样,明明条件不满足,设断点也能进入,请教专家
分享到: 更多 (0)