同人星球BBS -> 基础编程 -> [讨论][求助][VC++6.0] Debug跟Release 的差異 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

櫻葉 06-05-31 21:55

如題...我就只知道
Debug出來的EXE不能用在沒有裝VS的機器上而已
DEBUG用的?
Release 出來的EXE能用在任何機器上..(只要你寫的要求沒有很特別)
雖然是說發行用的....其實我發現BUG更多 =_=|||


Debug上不會出現的BUG轉成Release反而就出現了...

就好像值已經被先預訂一樣執行第一次會無視條件..直到執行第2次才會正常..等..

求救了OTZ

littlewater 06-05-31 22:31
这样的情况,其实是DEBUG下面就已经有错了,总之,只有根据错误来判断可能的问题了……DEBUG下面没有错不表示RELEASE一定没有问题

比如DEBUG下面数组越界有时候也不错的,总之,需要在RELEASE下面先看所有的情况,甚至还需要多台机器(可能的话,请别人测试也好)来测试,很有必要的!

櫻葉 06-06-01 00:50
想了一想還是決定把東西丟上來了...

這BUG只有在遊戲一開始才會出現..一開始就會有個怪物一定會位於座標(0,0)然後往下跑

之後就會照我的想法怪物在X座標100到399隨機出現

以下列出我的寫法

Copy code
void ship::monshow()
{    
   if (g_start==false)
   {    for (i=0;i<10;i++)
       {mon[i].exist=true;
       }
              mcount=0;
       for (i=0;i<6;i++)
       {b[i].exist=true;
       }
       for (i=0;i<10;i++)
       {c[i].exist=true;
       }
              //bcount=0;
              //ccount=0;

   }
   for (i=0;i<10;i++)
       {            
          if (mon[i].exist)
           {    mon[i].x=100+rand()%400;
                                    mon[i].y=0;
               mon[i].exist = false;
               mcount++;
               break;
           }

       }
   if(mcount != 0)
    for(i=0;i<10;i++)      
    {    
        if (mon[i].exist==false)
           {
            apply_surface(mon[i].x,mon[i].y,monster,screen);
            mon[i].y+=3;
            mon[i].r.x=mon[i].x;
            mon[i].r.y=mon[i].y;
            mon[i].r.w=mon[i].x+30;
            mon[i].r.h=mon[i].y+30;
           }
           if(mon[i].y>480)
           {
               mon[i].exist = true;
               mcount--;
           }    
   
    }

}


再DE BUG下則完全照我想法一開始就是100到399的範圍產生...這樣反而變成DE BUG才是我想要的OTZ...

雖然是有想到解決的方法...不過這個有解嗎?至少我是無解了~_~....

題外話....這東西當成專題丟出去會不會有問題阿OTZ....因為已經是我要交出去的成品了<囧>

littlewater 06-06-01 08:29
看了半天没有看得很明白……顺便一问,.exist=true表示这个东西不应该绘制在屏幕上,而.exist=false是绘制在屏幕上吗?

if (g_start==false)
  {  
   for (i=0;i<10;i++)
    {
       mon.exist=true;
    }
    mcount=0;
    for (i=0;i<6;i++)
    {
       b.exist=true;
    }
    for (i=0;i<10;i++)
    {
       c.exist=true;
    }
    //bcount=0;
    //ccount=0;
  }
这段貌似是初始化,全部为true了?

现在最好能够查看一下在RELEASE下面的X值为多少,VC7或8有时候可以在RELEASE下面进行调试(只能查看,而且容易出问题),或者用个FILE*写到文件中?总之就是第一个有错误巴、、、

卿卿雅儿 06-06-02 00:18
1. debug包括调试信息,release不包括
2. debug没有经过任何优化,release经过优化(不会改变功能,但语句可能被修改)

而且貌似断言不会出现在release中

另外,debug和release的编译选项是独立设置的(上面的东西很多都是可以设置的内容,我说的是默认值),如果设置不一样可能导致一个能运行一个不能(vc7以上的某些库文件windows不自带,请确保发布时以某种形式提供了这些库,不装vc就不能运行一般都是这个原因)

littlewater 06-06-02 18:19
Quote:
引用第4楼卿卿雅儿06-06-02 00:18发表的“”:
1. debug包括调试信息,release不包括
2. debug没有经过任何优化,release经过优化(不会改变功能,但语句可能被修改)

而且貌似断言不会出现在release中

.......


VC8以后一般需要把MSVCRT的几个DLL带出来,不然可能需要重新编译整个文件大概使用/MTD或者用/MT巴,如果是DLL的那个个人以为非得佩带足够的DLL才行呵呵^^

卿卿雅儿 06-06-02 19:39
我都选静态链接,这样虽然生成的东西会大200k左右,但是省了很多麻烦

littlewater 06-06-03 20:25
那么如果有动态连接能不能转成静态的啊?

毕竟大部分都是用的DLL比如DX或者很多商业的东西^^


查看完整版本: [-- [讨论][求助][VC++6.0] Debug跟Release 的差異 --] [-- top --]

Powered by PHPWind v5.3 Code © 2003-05 PHPWind
Time 0.585522 second(s),query:4 Gzip enabled

You can contact us