是什么编译选项让while(1);后面的代码不编译了?

发布于 2022-09-18 18:23:18 字数 125 浏览 11 评论 0

这是我在调试u-boot遇到的一个问题,我在其中的一个函数中,加入了while(1);这行代码,我通过objdump看到while(1)后面的代码都没有编译了,我查了一下uboot的编译文件,没发现相应的选项,请问:这个优化是编译器的什么选项控制的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

醉态萌生 2022-09-25 18:23:18

优化掉了,因为被认为是无用代码.

瑕疵 2022-09-25 18:23:18

怎样能让它不优化呢?

寂寞陪衬 2022-09-25 18:23:18

你看看有-O, -O2 或-O3选项吗? 去掉

累赘 2022-09-25 18:23:18

这种优化应当属于最初级的优化,我怀疑不用优化选项也还是被优化掉.
关键是LZ为什么需要这样

  1. $ cat >test.c
  2. #include <stdio.h>
  3. void f()
  4. {
  5.         while(1);
  6.         printf("test\n");
  7. }
  8. $ gcc -S test.c
  9. $ cat test.s
  10.         .file   "test.c"
  11.         .text
  12. .globl f
  13.         .type   f, @function
  14. f:
  15.         pushl   %ebp
  16.         movl    %esp, %ebp
  17. .L2:
  18.         jmp     .L2
  19.         .size   f, .-f
  20.         .section        .note.GNU-stack,"",@progbits
  21.         .ident  "GCC: (GNU) 3.4.4"

复制代码

半衾梦 2022-09-25 18:23:18

事情是这样的,uboot移植中有个地方会引起死机现象,必须用jtag仿真器来找出具体哪个地方引起的,由于uboot做了地址空间的重映射,所以不能在codewarrior中开始就设置断点,所以我想在加一条while(1)语句,当CPU运行到这里的时候,我用JTAG仿真器连接上去,修改PC指针,跳到下一条指令,然后一条条执行,但是现在while(1)后面的代码都给我优化掉了,我就不能调了

聆听风音 2022-09-25 18:23:18

原帖由 pengxihan 于 2009-4-10 23:04 发表
事情是这样的,uboot移植中有个地方会引起死机现象,必须用jtag仿真器来找出具体哪个地方引起的,由于uboot做了地址空间的重映射,所以不能在codewarrior中开始就设置断点,所以我想在加一条while(1)语句,当CP ...

"忽悠"一下编译器:

int i;
..................
..................
i=f(x);  //让f(x) 运算结果是1
while(i);
......................

[ 本帖最后由 system888net 于 2009-4-10 23:59 编辑 ]

耶耶耶 2022-09-25 18:23:18

原帖由 system888net 于 2009-4-10 23:57 发表

"忽悠"一下编译器:

int i;
..................
..................
i=f(x);  //让f(x) 运算结果是1
while(i);
......................

恩,不错的办法

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文