打印

编译器编译不到的语句,大家知道是怎么回事吗?

[复制链接]
2787|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
perry0428|  楼主 | 2010-9-28 15:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,我用的新华龙的编译器,总是有这个问题困饶着我,编译成功后没有任何错误,但是去程序内设置断点,就说无此地址行,无法设置断点,之前我就会加一个或几个NOP来解决这个问题,这次又遇到这个问题,希望能够得到大家的帮助~

相关帖子

沙发
ayb_ice| | 2010-9-28 15:47 | 只看该作者
可能是被优化掉了

使用特权

评论回复
板凳
yewuyi| | 2010-9-28 16:00 | 只看该作者
1、被优化
2、无效语句

使用特权

评论回复
地板
perry0428|  楼主 | 2010-9-28 16:15 | 只看该作者
为什么会这样呢?是编译器的问题还是我的程序问题呢,能不能说的具体点呢

使用特权

评论回复
5
perry0428|  楼主 | 2010-9-28 16:19 | 只看该作者
单步调试会跳过这几句,这样话会不会引起程序的混乱呢

使用特权

评论回复
6
ar_dong| | 2010-9-28 19:18 | 只看该作者
编译器垃圾
我遇到过,
写的东西就是不编译
稍微改一下程序结果就ok了
编译完成后看看对应汇编就知道了

使用特权

评论回复
7
yuyetufu| | 2010-9-29 08:55 | 只看该作者
新华龙默认是用KEIL编译器的。降低优化级别试试

使用特权

评论回复
8
perry0428|  楼主 | 2010-9-29 10:24 | 只看该作者
KEIL编译器优化级别
1.常量重叠(constant folding)   6.寄存器间参数传递(parameter passing in register)
  
2.通用子表达式删除(common subexpression elimination) 7.循环(loop rotation)
  
3.长度缩减速(reduction) 8.死码删除(dead code elimination)
  
4.控制流优化(control flow optimization) 9.通用Tail Merging
  
5.寄存器变量使用(register variable usage) 10.通用子程序块打包(block subroutine packing)

使用特权

评论回复
9
perry0428|  楼主 | 2010-9-29 10:49 | 只看该作者
7楼: 新华龙默认是用KEIL编译器的。降低优化级别试试
回复,之前默认的级别是9.通用Tail Merging ,我改为最低级别就不会出现这样的问题了.
    但这样会不会存在隐患呢,好多错误的地方编译器识别不出来呢

使用特权

评论回复
10
tylr2005| | 2010-9-29 11:34 | 只看该作者
未被调用的东西不参与编译

使用特权

评论回复
11
泰山特曲123| | 2010-9-29 12:25 | 只看该作者
没有编译到的变量使用volatile关键字,优化等级使用9也没有问题。

使用特权

评论回复
12
linqing171| | 2010-9-29 12:26 | 只看该作者
正常现象。
偶尔还有多行被优化成一个代码块的,无法在中间下断点。
这种,你就在汇编里面调试就是了,就当是你的汇编。

一般这种情况,我都是调试的时候用优先级低的,优化后不会有问题。编译器有碰到有bug的,但是keil的稳定版本,从来没有发现过bug

使用特权

评论回复
13
perry0428|  楼主 | 2010-9-29 17:18 | 只看该作者
我也觉得他们这个不好,但使用熟了
听大家这么说,决定换了试试!!

使用特权

评论回复
14
zdhlixiang2006| | 2010-10-4 17:43 | 只看该作者
被优化掉了,你可以通过调低编译器的优化级别,KEIL就可以调整

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:有限的生命里,活出精彩!!

5

主题

47

帖子

1

粉丝