科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件别让优化搅乱你的代码

别让优化搅乱你的代码

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

发现程序逻辑执行异常或跟踪调试受阻时(因为编译器的优化,许多你写的代码在汇编中被移除了),检查一下是否开了优化,能省下不少精力。

作者:myjpa 来源:CSDN 2008年3月22日

关键字: C C++ 优化 代码 Linux

  • 评论
  • 分享微博
  • 分享邮件
最近在VS2005上作一个WindowsMobile5.0C++程序时,写了一个很简单的函数:包括一些变量声明,还有一个遍历链表查找的动作。就是这个小东西,让我大费周折了n个小时。

首先我发现函数的返回值不合理,于是在DEBUG模式下,单步跟踪。神奇的是,我在debug界面下,竟然完全看不到所有的局部变量,无法观察到他们的值。而且在一个传值的函数调用后,我传入的实参竟然被更改了!就好像这样:

int index=0;

fun(index);     
//fun()的参数是传值调用,不是传引用调用。

//这时竟然index!=0     L

 

我怀疑是不是指针没控制好,覆盖了这个值了,然而仔细检查过之后,又没有发现这方面的痕迹。于是我转而求教同事。同事不愧经验丰富,过了15分钟,跑过来对我无辜地说:“你把优化选项关闭就没问题了”。我愕然:“DEBUG下也可以开优化吗?”

然而事实证明了我的无知-_-!,我的项目不知什么时候设置成这样了。。。

当我改掉以后:

一切OK,局部变量也能观察了,程序逻辑也正确了。

通过这件事,我得到一个经验,以后发现程序逻辑执行异常或跟踪调试受阻时(因为编译器的优化,许多你写的代码在汇编中被移除了),检查一下是否开了优化,能省下不少精力。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章