brent's hut

这是个很狡猾的bug。

某天, 发现一个bug, 会导致release版本下异常, 但在debug版本下正常, 可以定位该bug在下面代码中:
void CMoveHandlerStateDraw::OnLButtonUp(UINT nFlags, CPoint point)
{
    
    
    AdjustPoint(point);

    m_pHandler
->Drop(point, m_ptHandlerPos);

    
}
但是,一旦往这个函数中插入用来dump数据的代码, bug就不再出现, 不论是将数据写到文件还是显示在messagebox上。
启用release版本的"Debug Information", bug也不再出现。
就算只是在该函数中声明一个CString变量, 这个狡猾的bug似乎马上就知道,马上就藏起来, 把这个变量一去掉, 它马上又跑出来了。

但后来发现, 这只是一只很普通的bug,根本没什么超能力。

聪明的你,知道这是为什么吗?

posted on 2010-03-04 11:12 brent 阅读(990) 评论(4)  编辑 收藏 引用 所属分类: C++

评论

# re: 这是个很狡猾的bug。 2010-03-09 10:09 李现民

-__-看不出来  回复  更多评论   

# re: 这是个很狡猾的bug。 2010-05-12 20:36 viechang

我来试试
debug下自动填充变量, 而release不会。

所以我猜release下AdjustPoint(point)后point的值并没有真正改变。之后的m_pHandler->Drop(point, m_ptHandlerPos)使用的还是该函数传入时的值。  回复  更多评论   

# re: 这是个很狡猾的bug。 2010-05-13 10:10 brent

@viechang

你说得对。 具体原因是Drop()函数里面的有1个变量未赋初始值。
  回复  更多评论   

# re: 这是个很狡猾的bug。 2011-06-07 15:24 rollstone

AdjustPoint( point);
这句很有问题,传值调用,只是个拷贝。  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理