是什么编译选项让while(1);后面的代码不编译了?
这是我在调试u-boot遇到的一个问题,我在其中的一个函数中,加入了while(1);这行代码,我通过objdump看到while(1)后面的代码都没有编译了,我查了一下uboot的编译文件,没发现相应的选项,请问:这个优化是编译器的什么选项控制的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
优化掉了,因为被认为是无用代码.
怎样能让它不优化呢?
你看看有-O, -O2 或-O3选项吗? 去掉
这种优化应当属于最初级的优化,我怀疑不用优化选项也还是被优化掉.
关键是LZ为什么需要这样
复制代码
事情是这样的,uboot移植中有个地方会引起死机现象,必须用jtag仿真器来找出具体哪个地方引起的,由于uboot做了地址空间的重映射,所以不能在codewarrior中开始就设置断点,所以我想在加一条while(1)语句,当CPU运行到这里的时候,我用JTAG仿真器连接上去,修改PC指针,跳到下一条指令,然后一条条执行,但是现在while(1)后面的代码都给我优化掉了,我就不能调了
"忽悠"一下编译器:
int i;
..................
..................
i=f(x); //让f(x) 运算结果是1
while(i);
......................
[ 本帖最后由 system888net 于 2009-4-10 23:59 编辑 ]
恩,不错的办法