程序编译成release后,F5运行正常,但Ctrl+F5运行就出问题


问题:
    编译器:VC6,程序在debug状态调试的,一切工作正常,然后在Relase状态编译,运行时发现窗口中两个地方的图未被画出来,这两个图分别是自己定义的两个类实现的。在Relase状态用F5运行也是正常的,所以非常费解,也没办法调试。因为在F5可调试的状态下,程序是可以运行的。无疑这是一个大问题。
首先从网上找到了一个帖子,如下:
http://topic.csdn.net/t/20021221/12/1282920.html
问题和我的基本上相同,解决之后发现是变量未赋值的问题。看来我也应该向这方面努力了,不过只能更具问题存在的原因来分析可能存在的问题,然后在最有可能出错的地方通过写日志的方式输出跟踪调试信息。
首先我找到我绘图的两个类中的绘图函数,在绘图函数中插入afxmsgbox输出信息,发现该函数根本没有执行。这个函数是一个虚函数,在其基类函数中的onpaint函数中调用该虚函数。那为什么会不执行呢?
在窗口中还有几处绘图也是从该基函数派生的,它们都可以画出来。由于程序庞大而错综复杂,很难知道原因在哪里?


void CFSxMultiView::RelayOut()
{
 //标题栏区域
 CRect rt(m_rtFrame);


 m_rtTitleBar=rt; //调整到此,问题解决!!!
 if(m_bOwnTitleBar)
 {
//  m_rtTitleBar=rt; //放在这里造成了一个重大的问题,在RELEASE版本没有标题的框架之中之后会出问题(F5没问题,CTRL+F5有问题)
  m_rtTitleBar.DeflateRect(FRAME_BORDER_W,FRAME_BORDER_W);
  m_rtTitleBar.bottom=m_rtTitleBar.top+TITLEBAR_H;  
 }
 else
 {
     //由于m_rtTitleBar在构造函数中没有赋值,这里m_rtTitleBar.top的值将不可预料,所以...
      //但是令人费解的是,为什么会在debug下和release状态下的F5可以正常运行呢?
      //更奇怪的是,我改了其它的一些地方,发现按!运行程序也会正确运行,可是在目录下运行程序才不正确。
      //所以这样的错误编译器不提早在debug下给出,还反而迷惑我们。真不知道是怎么回事?
      //变量未赋值在编写程序过程中总有可能会疏忽,但是却造成如此重大而又难以调试的严重错误确实让我们汗颜!
      //也会心有余悸,如果哪一天又出现这样的bug时,在一个大型的软件中,
      //如何中成千上万的类成员变量中去找到哪些忘了赋值的变量呢?
     
     
   m_rtTitleBar.bottom=m_rtTitleBar.top+FRAME_BORDER_W;
 }

 if(m_titleBar.GetSafeHwnd()!=NULL)
 {
    m_titleBar.MoveWindow(m_rtTitleBar);
 }
 
 。。。
 后面紧接着计算输出的客户区view,
}


从昨天到今天,上班都是为了解决这个问题,花了就牛二虎之力,还好现在也终于解决了。

BENKONG 2009-12-15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值