Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15183986
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-26 22:21:39

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

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

int index=0;

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

//这时竟然index!=0     L

 

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

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

当我改掉以后:

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

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

阅读(776) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~