我在用IAR在线调试的时候,发现一个问题,比如:有一个函数是:decode(u8 id) { if(id ==0x01) { a = 0x01;//代表一种执行动作 } if(id == 0x02) { b = 0x01;//代表另一种执行动作 } } 我在调试的时候函数是这样的:decode(0x02) 但是单步执行到函数里面发现一下几种情况:1.id 的确是0x02,但是他两个if分支都去执行了;2.函数执行进去之后就id却不是0x02而是其他任意值,两个分支还是都执行,但是奇怪的是只有调试的时候这样,板子在机子上运行的时候没有任何异常。想问一下这是为什么?谢谢!在线等。。。。。 |
调试程序时,要把汇编窗口也开着,看程序有没有被优化。
程序被优化if语句判断就会出错吗?程序代码是被改写的,这个只是举一个简单的例子说明,还有没有其他可能原因?
按F11,单步执行,看结果。通过a、b值变化,得出程序执行的哪个分支。执行的时候,id==1时,也根本进不了 "b = 0x01;"的赋值语句
同样,id==2时,也根本进不了 "a = 0x01;"的赋值语句
评分
查看全部评分
我觉得单测这个函数没有问题,会不会是整个程序其他地方影响的,我只是举这个例子方便叙述问题,就是您有没有遇到过这种情况,在一个比较复杂的完成项目程序中,局部if语句执行异常的情况。我觉得id是直接传进来的,和程序的其他地方没有关系,但是就是调试的时候跟踪下来是异常的。
评分
查看全部评分
评分
查看全部评分
id只是一个局部参数,而且是直接传递的,没有同名;是单任务系统;没有中断更改ID的值;您说的第4点不太好确定