程序编译成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

Visual Studio是一个功能强大的集成开发环境(IDE),用于编写和调试各种类型的软件,包括Windows应用程序、Web应用、游戏和移动应用等。以下是使用Visual Studio编译和运行程序的基本步骤: 1. **安装Visual Studio**:首先,确保你已经安装了最新版本的Visual Studio,可以从官方Microsoft网站下载并安装。 2. **创建新项目**: - 打开Visual Studio,选择“文件” -> “新建” -> “项目”。 - 在“新建项目”窗口中,选择合适的模板(如C#、C++、.NET等),然后输入项目名称和保存位置。 3. **添加代码**: - 在项目中,创建一个新的源代码文件,比如`main.cpp`或`Program.cs`。 - 编写你的程序代码,确保包含入口点,如C++中的`int main()`, C#中的`using namespace System; class Program { static void Main() }`。 4. **设置构建配置**: - 在解决方案资源管理器(Solution Explorer)右击项目,选择“属性”。 - 在“常规”选项卡下,选择“配置目标”(如Debug或Release)以决定生成的程序类型。 5. **编译项目**: - 右键点击项目,选择“构建”或按下Ctrl + Shift + B。Visual Studio会编译你的代码,检查语法错误。 6. **调试或运行**: - 如果没有错误,你可以选择“调试” -> “启动调试”(F5)来进行单步调试。 - 如果只想运行程序而无需调试,可以选择“调试” -> “开始调试”(Ctrl + F5)或者直接从“运行”菜单中选择“启动没有调试”的选项。 7. **查看输**: - 在Visual Studio的输窗口(Output Window)中,可以看到编译和运行过程中的任何输信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值