- UID
- 161675
- 性别
- 女
|
各位好:
strongchen好,问题已经解决。
在用codewarrior3.1版本调试时候,出现了不能设置断点的问题,按照strongchen的建议查看lst文件,发现不能设置断点的语句,其汇编代码当中也没有其相应的汇编指令,在程序运行的时候,不能设置断点的语句是不会执行的。这个问题我花了我两天的时间,百思不得其解。后来跟同学讨论了一下,同学建议将不能设置断点的语句顺序调换一下,竟然好了,但是在同一个函数当中还是有其它的语句不能设置断点,该函数里面主要是由if..else if..if else ..else.条件判断语句组成。后来就如法炮制,将其他的不能设置断点的语句调换一下顺序,在调换的时候发现:凡是在该函数里面的不同的if条件语句段当中,如果前面一个if语句段里面最后一句和接下来的if或者if else语句段里面的最后一句相同的话,那么前面的if语句最后一句不能设置断点,而接下来的最后一个if或者if else语句段里面的最后一句能执行!
我在其他函数里面与次类似的情况也改了顺序,都能执行了。我举例说明。
void function(void)
{
if(.....)
asm(nop);
else
{
语句1;
if(......)
{
.........
语句2;
}
else if(.....)
{
.........
if(......)
{
.........
.........
语句2;
}
}
else if(.........)
{
.........
.........
if(.........)
{
.........
语句2;
}
}
}
}
在上面这个函数当中,不同的if 或者if else里面在语句段在最后一句都有一个
“语句2;”在实际调试当中,前两个红色的“语句2;”就不能设置断点,而最后一个蓝色的“语句2;”就能设置断点且被执行。出现这种问题只要不将相同的语句放在最后一句就行,实在不行的话就在最后一句加上空指令。
我有点肯定是软件的bug,我什么都没有修改,仅仅将各个判断语句最后一句相同的语句换成不一样的就可以了。希望能给大家带来一些参考。另外,不知新版本的codewarrior有此类bug或者现象出现。
|
|