最近在VS2005上作一个WindowsMobile5.0的C++程序时,写了一个很简单的函数:包括一些变量声明,还有一个遍历链表查找的动作。就是这个小东西,让我大费周折了n个小时。
首先我发现函数的返回值不合理,于是在DEBUG模式下,单步跟踪。神奇的是,我在debug界面下,竟然完全看不到所有的局部变量,无法观察到他们的值。而且在一个传值的函数调用后,我传入的实参竟然被更改了!就好像这样:
int index=0;fun(index); //fun()的参数是传值调用,不是传引用调用。//这时竟然index!=0 L我怀疑是不是指针没控制好,覆盖了这个值了,然而仔细检查过之后,又没有发现这方面的痕迹。于是我转而求教同事。同事不愧经验丰富,过了15分钟,跑过来对我无辜地说:“你把优化选项关闭就没问题了”。我愕然:“DEBUG下也可以开优化吗?”
然而事实证明了我的无知-_-!,我的项目不知什么时候设置成这样了。。。
当我改掉以后:
一切OK,局部变量也能观察了,程序逻辑也正确了。
通过这件事,我得到一个经验,以后发现程序逻辑执行异常或跟踪调试受阻时(因为编译器的优化,许多你写的代码在汇编中被移除了),检查一下是否开了优化,能省下不少精力。