别让优化搅乱你的代码

王朝other·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

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

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

int index=0;

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

//这时竟然index!=0 L

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

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

当我改掉以后:

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航