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

[复制链接]
4165|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 | 显示全部楼层
为什么会这样呢?是编译器的问题还是我的程序问题呢,能不能说的具体点呢
 楼主| perry0428 发表于 2010-9-28 16:19 | 显示全部楼层
单步调试会跳过这几句,这样话会不会引起程序的混乱呢
ar_dong 发表于 2010-9-28 19:18 | 显示全部楼层
编译器垃圾
我遇到过,
写的东西就是不编译
稍微改一下程序结果就ok了
编译完成后看看对应汇编就知道了
yuyetufu 发表于 2010-9-29 08:55 | 显示全部楼层
新华龙默认是用KEIL编译器的。降低优化级别试试
 楼主| 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)
 楼主| perry0428 发表于 2010-9-29 10:49 | 显示全部楼层
7楼: 新华龙默认是用KEIL编译器的。降低优化级别试试
回复,之前默认的级别是9.通用Tail Merging ,我改为最低级别就不会出现这样的问题了.
    但这样会不会存在隐患呢,好多错误的地方编译器识别不出来呢
tylr2005 发表于 2010-9-29 11:34 | 显示全部楼层
未被调用的东西不参与编译
泰山特曲123 发表于 2010-9-29 12:25 | 显示全部楼层
没有编译到的变量使用volatile关键字,优化等级使用9也没有问题。
linqing171 发表于 2010-9-29 12:26 | 显示全部楼层
正常现象。
偶尔还有多行被优化成一个代码块的,无法在中间下断点。
这种,你就在汇编里面调试就是了,就当是你的汇编。

一般这种情况,我都是调试的时候用优先级低的,优化后不会有问题。编译器有碰到有bug的,但是keil的稳定版本,从来没有发现过bug
 楼主| perry0428 发表于 2010-9-29 17:18 | 显示全部楼层
我也觉得他们这个不好,但使用熟了
听大家这么说,决定换了试试!!
zdhlixiang2006 发表于 2010-10-4 17:43 | 显示全部楼层
被优化掉了,你可以通过调低编译器的优化级别,KEIL就可以调整
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

5

主题

47

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部