青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 505  文章 - 1034  trackbacks - 0
<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910


子曾經(jīng)曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 921184
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜

未初始化的bool成員變量在Debug下默認(rèn)值為false,Test下默認(rèn)true。一個bug查了一晚上,原因就是這個.

人物創(chuàng)建的場景在Debug下正常,在Test和Release下不正常,就是鏡頭不對。然后就盯著這個載入場景的配置文件的代碼看,ini不用了,換成xml看看,還是有問題!直接在代碼里賦值,不用配置文件還是有問題!(之所以盯著這里看,是因?yàn)樵赥est下調(diào)試時發(fā)現(xiàn)讀配置文件出來的值不對,但是用log打印出來卻是對的!)
        于是否定了配置文件的問題,然后一想,既然是鏡頭的問題,就在setCamera(...)函數(shù)上打個斷點(diǎn)不就行了,看哪里不該調(diào)用的時候調(diào)用了這個函數(shù),Bingo!問題就找到了!丫的一未初始化的bool成員變量在Test下默認(rèn)是true,我靠!
         出來混,遲早要還的!寫了成員變量,立馬初始化才是正道,千萬別偷懶或者忘了初始化!

另可參考:
[轉(zhuǎn)]DEBUG和RELEASE版本差異及調(diào)試相關(guān)問題

Debug和Release有什么區(qū)別?怎么把Debug轉(zhuǎn)成Release ?
1。Debug和Release有什么區(qū)別,為什么要使用Release版本!  
2。怎么把Debug轉(zhuǎn)成Release  

轉(zhuǎn)載:  

Debug版本包括調(diào)試信息,所以要比Release版本大很多(可能大數(shù)百K至數(shù)M)。至于是否需要DLL支持,主要看你采用的編譯選項(xiàng)。如果是基于ATL的,則Debug和Release版本對DLL的要求差不多。如果采用的編譯選項(xiàng)為使用MFC動態(tài)庫,則需要MFC42D.DLL等庫支持,而Release版本需要MFC42.DLL支持。Release   Build不對源代碼進(jìn)行調(diào)試,不考慮MFC的診斷宏,使用的是MFC   Release庫,編譯十對應(yīng)用程序的速度進(jìn)行優(yōu)化,而Debug   Build則正好相反,它允許對源代碼進(jìn)行調(diào)試,可以定義和使用MFC的診斷宏,采用MFC   Debug庫,對速度沒有優(yōu)化。    


一、Debug   和   Release   編譯方式的本質(zhì)區(qū)別  

Debug   通常稱為調(diào)試版本,它包含調(diào)試信息,并且不作任何優(yōu)化,便于程序員調(diào)試程序。Release   稱為發(fā)布版本,它往往是進(jìn)行了各種優(yōu)化,使得程序在代碼大小和運(yùn)行速度上都是最優(yōu)的,以便用戶很好地使用。  
Debug   和   Release   的真正秘密,在于一組編譯選項(xiàng)。下面列出了分別針對二者的選項(xiàng)(當(dāng)然除此之外還有其他一些,如/Fd   /Fo,但區(qū)別并不重要,通常他們也不會引起   Release   版錯誤,在此不討論)  

Debug   版本:  
/MDd   /MLd   或   /MTd   使用   Debug   runtime   library(調(diào)試版本的運(yùn)行時刻函數(shù)庫)  
/Od   關(guān)閉優(yōu)化開關(guān)  
/D   "_DEBUG"   相當(dāng)于   #define   _DEBUG,打開編譯調(diào)試代碼開關(guān)(主要針對  
assert函數(shù))  
/ZI   創(chuàng)建   Edit   and   continue(編輯繼續(xù))數(shù)據(jù)庫,這樣在調(diào)試過  
程中如果修改了源代碼不需重新編譯  
/GZ   可以幫助捕獲內(nèi)存錯誤  
/Gm   打開最小化重鏈接開關(guān),減少鏈接時間  

Release   版本:    
/MD   /ML   或   /MT   使用發(fā)布版本的運(yùn)行時刻函數(shù)庫  
/O1   或   /O2   優(yōu)化開關(guān),使程序最小或最快  
/D   "NDEBUG"   關(guān)閉條件編譯調(diào)試代碼開關(guān)(即不編譯assert函數(shù))  
/GF   合并重復(fù)的字符串,并將字符串常量放到只讀內(nèi)存,防止  
被修改  

實(shí)際上,Debug   和   Release   并沒有本質(zhì)的界限,他們只是一組編譯選項(xiàng)的集合,編譯器只是按照預(yù)定的選項(xiàng)行動。事實(shí)上,我們甚至可以修改這些選項(xiàng),從而得到優(yōu)化過的調(diào)試版本或是帶跟蹤語句的發(fā)布版本。  

二、哪些情況下   Release   版會出錯  

有了上面的介紹,我們再來逐個對照這些選項(xiàng)看看   Release   版錯誤是怎樣產(chǎn)生的  

1.   Runtime   Library:鏈接哪種運(yùn)行時刻函數(shù)庫通常只對程序的性能產(chǎn)生影響。調(diào)試版本的   Runtime   Library   包含了調(diào)試信息,并采用了一些保護(hù)機(jī)制以幫助發(fā)現(xiàn)錯誤,因此性能不如發(fā)布版本。編譯器提供的   Runtime   Library   通常很穩(wěn)定,不會造成   Release   版錯誤;倒是由于   Debug   的   Runtime   Library   加強(qiáng)了對錯誤的檢測,如堆內(nèi)存分配,有時會出現(xiàn)   Debug   有錯但   Release   正常的現(xiàn)象。應(yīng)當(dāng)指出的是,如果   Debug   有錯,即使   Release   正常,程序肯定是有   Bug   的,只不過可能是   Release   版的某次運(yùn)行沒有表現(xiàn)出來而已。  

2.   優(yōu)化:這是造成錯誤的主要原因,因?yàn)殛P(guān)閉優(yōu)化時源程序基本上是直接翻譯的,而打開優(yōu)化后編譯器會作出一系列假設(shè)。這類錯誤主要有以下幾種:  

(1)   幀指針(Frame   Pointer)省略(簡稱   FPO   ):在函數(shù)調(diào)用過程中,所有調(diào)用信息(返回地址、參數(shù))以及自動變量都是放在棧中的。若函數(shù)的聲明與實(shí)現(xiàn)不同(參數(shù)、返回值、調(diào)用方式),就會產(chǎn)生錯誤————但   Debug   方式下,棧的訪問通過   EBP   寄存器保存的地址實(shí)現(xiàn),如果沒有發(fā)生數(shù)組越界之類的錯誤(或是越界“不多”),函數(shù)通常能正常執(zhí)行;Release   方式下,優(yōu)化會省略   EBP   棧基址指針,這樣通過一個全局指針訪問棧就會造成返回地址錯誤是程序崩潰。C++   的強(qiáng)類型特性能檢查出大多數(shù)這樣的錯誤,但如果用了強(qiáng)制類型轉(zhuǎn)換,就不行了。你可以在   Release   版本中強(qiáng)制加入   /Oy-   編譯選項(xiàng)來關(guān)掉幀指針省略,以確定是否此類錯誤。此類錯誤通常有:  

●   MFC   消息響應(yīng)函數(shù)書寫錯誤。正確的應(yīng)為  
afx_msg   LRESULT   OnMessageOwn(WPARAM   wparam,   LPARAM   lparam);  
ON_MESSAGE   宏包含強(qiáng)制類型轉(zhuǎn)換。防止這種錯誤的方法之一是重定義   ON_MESSAGE   宏,把下列代碼加到   stdafx.h   中(在#include   "afxwin.h"之后),函數(shù)原形錯誤時編譯會報(bào)錯  
#undef   ON_MESSAGE  
#define   ON_MESSAGE(message,   memberFxn)   \  
{   message,   0,   0,   0,   AfxSig_lwl,   \  
(AFX_PMSG)(AFX_PMSGW)(static_cast<   LRESULT   (AFX_MSG_CALL   \  
CWnd::*)(WPARAM,   LPARAM)   >   (&memberFxn)   },  

(2)   volatile   型變量:volatile   告訴編譯器該變量可能被程序之外的未知方式修改(如系統(tǒng)、其他進(jìn)程和線程)。優(yōu)化程序?yàn)榱耸钩绦蛐阅芴岣撸0岩恍┳兞糠旁诩拇嫫髦校愃朴?nbsp;  register   關(guān)鍵字),而其他進(jìn)程只能對該變量所在的內(nèi)存進(jìn)行修改,而寄存器中的值沒變。如果你的程序是多線程的,或者你發(fā)現(xiàn)某個變量的值與預(yù)期的不符而你確信已正確的設(shè)置了,則很可能遇到這樣的問題。這種錯誤有時會表現(xiàn)為程序在最快優(yōu)化出錯而最小優(yōu)化正常。把你認(rèn)為可疑的變量加上   volatile   試試。  

(3)   變量優(yōu)化:優(yōu)化程序會根據(jù)變量的使用情況優(yōu)化變量。例如,函數(shù)中有一個未被使用的變量,在   Debug   版中它有可能掩蓋一個數(shù)組越界,而在   Release   版中,這個變量很可能被優(yōu)化調(diào),此時數(shù)組越界會破壞棧中有用的數(shù)據(jù)。當(dāng)然,實(shí)際的情況會比這復(fù)雜得多。與此有關(guān)的錯誤有:  
●   非法訪問,包括數(shù)組越界、指針錯誤等。例如  
void   fn(void)  
{  
int   i;  
i   =   1;  
int   a[4];  
{  
int   j;  
j   =   1;  
}  
a[-1]   =   1;//當(dāng)然錯誤不會這么明顯,例如下標(biāo)是變量  
a[4]   =   1;  
}  
j   雖然在數(shù)組越界時已出了作用域,但其空間并未收回,因而   i   和   j   就會掩蓋越界。而   Release   版由于   i、j   并未其很大作用可能會被優(yōu)化掉,從而使棧被破壞。  

3.   _DEBUG   與   NDEBUG   :當(dāng)定義了   _DEBUG   時,assert()   函數(shù)會被編譯,而   NDEBUG   時不被編譯。除此之外,VC++中還有一系列斷言宏。這包括:  

ANSI   C   斷言   void   assert(int   expression   );  
C   Runtime   Lib   斷言   _ASSERT(   booleanExpression   );  
_ASSERTE(   booleanExpression   );  
MFC   斷言   ASSERT(   booleanExpression   );  
VERIFY(   booleanExpression   );  
ASSERT_VALID(   pObject   );  
ASSERT_KINDOF(   classname,   pobject   );  
ATL   斷言   ATLASSERT(   booleanExpression   );  
此外,TRACE()   宏的編譯也受   _DEBUG   控制。  

所有這些斷言都只在   Debug版中才被編譯,而在   Release   版中被忽略。唯一的例外是   VERIFY()   。事實(shí)上,這些宏都是調(diào)用了   assert()   函數(shù),只不過附加了一些與庫有關(guān)的調(diào)試代碼。如果你在這些宏中加入了任何程序代碼,而不只是布爾表達(dá)式(例如賦值、能改變變量值的函數(shù)調(diào)用   等),那么   Release   版都不會執(zhí)行這些操作,從而造成錯誤。初學(xué)者很容易犯這類錯誤,查找的方法也很簡單,因?yàn)檫@些宏都已在上面列出,只要利用   VC++   的   Find   in   Files   功能在工程所有文件中找到用這些宏的地方再一一檢查即可。另外,有些高手可能還會加入   #ifdef   _DEBUG   之類的條件編譯,也要注意一下。  
順便值得一提的是   VERIFY()   宏,這個宏允許你將程序代碼放在布爾表達(dá)式里。這個宏通常用來檢查   Windows   API   的返回值。有些人可能為這個原因而濫用   VERIFY()   ,事實(shí)上這是危險(xiǎn)的,因?yàn)?nbsp;  VERIFY()   違反了斷言的思想,不能使程序代碼和調(diào)試代碼完全分離,最終可能會帶來很多麻煩。因此,專家們建議盡量少用這個宏。  

4.   /GZ   選項(xiàng):這個選項(xiàng)會做以下這些事  

(1)   初始化內(nèi)存和變量。包括用   0xCC   初始化所有自動變量,0xCD   (   Cleared   Data   )   初始化堆中分配的內(nèi)存(即動態(tài)分配的內(nèi)存,例如   new   ),0xDD   (   Dead   Data   )   填充已被釋放的堆內(nèi)存(例如   delete   ),0xFD(   deFencde   Data   )   初始化受保護(hù)的內(nèi)存(debug   版在動態(tài)分配內(nèi)存的前后加入保護(hù)內(nèi)存以防止越界訪問),其中括號中的詞是微軟建議的助記詞。這樣做的好處是這些值都很大,作為指針是不可能的(而且   32   位系統(tǒng)中指針很少是奇數(shù)值,在有些系統(tǒng)中奇數(shù)的指針會產(chǎn)生運(yùn)行時錯誤),作為數(shù)值也很少遇到,而且這些值也很容易辨認(rèn),因此這很有利于在   Debug   版中發(fā)現(xiàn)   Release   版才會遇到的錯誤。要特別注意的是,很多人認(rèn)為編譯器會用   0   來初始化變量,這是錯誤的(而且這樣很不利于查找錯誤)。  
(2)   通過函數(shù)指針調(diào)用函數(shù)時,會通過檢查棧指針驗(yàn)證函數(shù)調(diào)用的匹配性。(防止原形不匹配)  
(3)   函數(shù)返回前檢查棧指針,確認(rèn)未被修改。(防止越界訪問和原形不匹配,與第二項(xiàng)合在一起可大致模擬幀指針省略   FPO   )  

通常   /GZ   選項(xiàng)會造成   Debug   版出錯而   Release   版正常的現(xiàn)象,因?yàn)?nbsp;  Release   版中未初始化的變量是隨機(jī)的,這有可能使指針指向一個有效地址而掩蓋了非法訪問。  

除此之外,/Gm   /GF   等選項(xiàng)造成錯誤的情況比較少,而且他們的效果顯而易見,比較容易發(fā)現(xiàn)。  
--------------------------------------------------------------  
Release是發(fā)行版本,比Debug版本有一些優(yōu)化,文件比Debug文件小  
Debug是調(diào)試版本,包括的程序信息更多  
Release方法:  
build->batch   build->build就OK.  

-----------------------------------------------------  

一、"Debug是調(diào)試版本,包括的程序信息更多"  

補(bǔ)充:只有DEBUG版的程序才能設(shè)置斷點(diǎn)、單步執(zhí)行、使用TRACE/ASSERT等調(diào)試輸出語句。REALEASE不包含任何調(diào)試信息,所以體積小、運(yùn)行速度快。  

二、一般發(fā)布release的方法除了hzh_shat(水)   所說的之外,還可以project->Set   Active   Config,選中release版本。此后,按F5或F7編譯所得的結(jié)果就是release版本。


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=131016

----------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
VC下關(guān)于debug和release的不同的討論
在使用VC開發(fā)軟件的過程中,正當(dāng)要享受那種興奮的時候突然發(fā)現(xiàn):release與debug運(yùn)行結(jié)果不一致,甚至出錯,而release又不方便調(diào)試,真的是當(dāng)頭一棒啊,可是疼歸疼,問題總要解決,下面將講述一下我的幾點(diǎn)經(jīng)驗(yàn),看看是不是其中之一:

1. 變量。
大家都知道,debug跟release在初始化變量時所做的操作是不同的,debug是將每個字節(jié)位都賦成0xcc(注1),而release的賦值近似于隨機(jī)(我想是直接從內(nèi)存中分配的,沒有初始化過)。這樣就明確了,如果你的程序中的某個變量沒被初始化就被引用,就很有可能出現(xiàn)異常:用作控制變量將導(dǎo)致流程導(dǎo)向不一致;用作數(shù)組下標(biāo)將會使程序崩潰;更加可能是造成其他變量的不準(zhǔn)確而引起其他的錯誤。所以在聲明變量后馬上對其初始化一個默認(rèn)的值是最簡單有效的辦法,否則項(xiàng)目大了你找都沒地方找。代碼存在錯誤在debug方式下可能會忽略而不被察覺到,如debug方式下數(shù)組越界也大多不會出錯,在release中就暴露出來了,這個找起來就比較難了:( 還是自己多加注意吧

2. 自定義消息的消息參數(shù)。
MFC為我們提供了很好的消息機(jī)制,更增加了自定義消息,好處我就不用多說了。這也存在debug跟release的問題嗎?答案是肯定的。在自定義消息的函數(shù)體聲明時,時常會看到這樣的寫法:afx_msg LRESULT OnMessageOwn(); Debug情況下一般不會有任何問題,而當(dāng)你在Release下且多線程或進(jìn)程間使用了消息傳遞時就會導(dǎo)致無效句柄之類的錯誤。導(dǎo)致這個錯誤直接原因是消息體的參數(shù)沒有添加,即應(yīng)該寫成:afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam); (注2)

3. release模式下不出錯,但debug模式下報(bào)錯。
這種情況下大多也是因?yàn)榇a書寫不正確引起的,查看MFC的源碼,可以發(fā)現(xiàn)好多ASSERT的語句(斷言),這個宏只是在debug模式下才有效,那么就清楚了,release版不報(bào)錯是忽略了錯誤而不是沒有錯誤,這可能存在很大的隱患,因?yàn)槭荄ebug模式下,比較方便調(diào)試,好好的檢查自己的代碼,再此就不多說了。

4. ASSERT, VERIFY, TRACE……….調(diào)試宏
這種情況很容易解釋。舉個例子:請?jiān)赩C下輸入ASSERT然后選中按F12跳到宏定義的地方,這里你就能夠發(fā)現(xiàn)Debug中ASSERT要執(zhí)行AfxAssertFailedLine,而Release下的宏定義卻為”#define ASSERT(f) ((void)0)”。所以注意在這些調(diào)試宏的語句不要用程序相關(guān)變量如i++寫操作的語句。VERIFY是個例外,”#define VERIFY(f) ((void)(f))”,即執(zhí)行,這里的作用就不多追究了,有興趣可自己研究:)。

總結(jié):
Debug與Release不同的問題在剛開始編寫代碼時會經(jīng)常發(fā)生,99%是因?yàn)槟愕拇a書寫錯誤而導(dǎo)致的,所以不要動不動就說系統(tǒng)問題或編譯器問題,努力找找自己的原因才是根本。我從前就常常遇到這情況,經(jīng)歷過一次次的教訓(xùn)后我就開始注意了,現(xiàn)在我所寫過的代碼我已經(jīng)好久沒遇到這種問題了。下面是幾個避免的方面,即使沒有這種問題也應(yīng)注意一下:

1. 注意變量的初始化,尤其是指針變量,數(shù)組變量的初始化(很大的情況下另作考慮了)。
2. 自定義消息及其他聲明的標(biāo)準(zhǔn)寫法
3. 使用調(diào)試宏時使用后最好注釋掉
4. 盡量使用try - catch(…)
5. 盡量使用模塊,不但表達(dá)清楚而且方便調(diào)試。
注1:
afc(afc) 網(wǎng)友提供:
debug版初始化成0xcc是因?yàn)?xcc在x86下是一條int 3單步中斷指令,這樣程序如果跑飛了遇到0xcc就會停下來,這和單片機(jī)編程時一般將沒用的代碼空間填入jmp 0000語句是一樣地
注2:
不知大家有沒有遇到過這種情況,具體原因我也不太清楚,是不是調(diào)用時按著默認(rèn)的參數(shù)多分配了WPARAM+LPARAM的空間而破壞了應(yīng)用程序的內(nèi)存空間?還請高手來補(bǔ)充。
NightWolf 網(wǎng)友提供:我遇見過,好像是在函數(shù)調(diào)用的時候參數(shù)入棧的問題。因?yàn)镸FC的消息使用宏寫的,所以如果定義了OnMessage()的函數(shù),編譯能夠通過,但是調(diào)用一次后,堆棧指針發(fā)生了偏移。然后就。。。
------------------------------------------------------------
_________________________________________________________
---------------------------------------------------------




[轉(zhuǎn)]DEBUG和RELEASE版本差異及調(diào)試相關(guān)問題 
I. 內(nèi)存分配問題

1. 變量未初始化。下面的程序在debug中運(yùn)行的很好。

thing * search(thing * something)
BOOL found;
for(int i = 0; i < whatever.GetSize(); i++)
{
if(whatever[i]->field == something->field)
{ /* found it */
found = TRUE;
break;
} /* found it */
}
if(found)
return whatever[i];
else
return NULL;
而在release中卻不行,因?yàn)閐ebug中會自動給變量初始化found=FALSE,而在release版中則不會。所以盡可能的給變量、類或結(jié)構(gòu)初始化。

2. 數(shù)據(jù)溢出的問題

如:char buffer[10];
int counter;

lstrcpy(buffer, "abcdefghik");

在debug版中buffer的NULL覆蓋了counter的高位,但是除非counter>16M,什么問題也沒有。但是在release版中,counter可能被放在寄存器中,這樣NULL就覆蓋了buffer下面的空間,可能就是函數(shù)的返回地址,這將導(dǎo)致ACCESS ERROR。

3. DEBUG版和RELEASE版的內(nèi)存分配方式是不同的 。如果你在DEBUG版中申請 ele 為 6*sizeof(DWORD)=24bytes,實(shí)際上分配給你的是32bytes(debug版以32bytes為單位分配), 而在release版,分配給你的就是24bytes(release版以8bytes為單位),所以在debug版中如果你寫ele[6],可能不會有什么問題,而在release版中,就有ACCESS VIOLATE。

II. ASSERT和VERIFY

1. ASSERT在Release版本中是不會被編譯的。

ASSERT宏是這樣定義的

#ifdef _DEBUG
#define ASSERT(x) if( (x) == 0) report_assert_failure()
#else
#define ASSERT(x)
#endif
實(shí)際上復(fù)雜一些,但無關(guān)緊要。假如你在這些語句中加了程序中必須要有的代碼
比如

ASSERT(pNewObj = new CMyClass);

pNewObj->MyFunction();

這種時候Release版本中的pNewObj不會分配到空間

所以執(zhí)行到下一個語句的時候程序會報(bào)該程序執(zhí)行了非法操作的錯誤。這時可以用VERIFY :

#ifdef _DEBUG
#define VERIFY(x) if( (x) == 0) report_assert_failure()
#else
#define VERIFY(x) (x)
#endif
這樣的話,代碼在release版中就可以執(zhí)行了。

III. 參數(shù)問題:

自定義消息的處理函數(shù),必須定義如下:

afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);

返回值必須是HRESULT型,否則Debug會過,而Release出錯

IV. 內(nèi)存分配

保證數(shù)據(jù)創(chuàng)建和清除的統(tǒng)一性:如果一個DLL提供一個能夠創(chuàng)建數(shù)據(jù)的函數(shù),那么這個DLL同時應(yīng)該提供一個函數(shù)銷毀這些數(shù)據(jù)。數(shù)據(jù)的創(chuàng)建和清除應(yīng)該在同一個層次上。

V. DLL的災(zāi)難

人們將不同版本DLL混合造成的不一致性形象的稱為 “動態(tài)連接庫的地獄“(DLL Hell) ,甚至微軟自己也這么說http://msdn.microsoft.com/library/techart/dlldanger1.htm)。

如果你的程序使用你自己的DLL時請注意:

1. 不能將debug和release版的DLL混合在一起使用。debug都是debug版,release版都是release版。

解決辦法是將debug和release的程序分別放在主程序的debug和release目錄下


2. 千萬不要以為靜態(tài)連接庫會解決問題,那只會使情況更糟糕。

VI. RELEASE板中的調(diào)試 :

1. 將ASSERT() 改為 VERIFY() 。找出定義在"#ifdef _DEBUG"中的代碼,如果在RELEASE版本中需要這些代碼請將他們移到定義外。查找TRACE(...)中代碼,因?yàn)檫@些代碼在RELEASE中也不被編譯。 請認(rèn)真檢查那些在RELEASE中需要的代碼是否并沒有被便宜。

2. 變量的初始化所帶來的不同,在不同的系統(tǒng),或是在DEBUG/RELEASE版本間都存在這樣的差異,所以請對變量進(jìn)行初始化。

3. 是否在編譯時已經(jīng)有了警告?請將警告級別設(shè)置為3或4,然后保證在編譯時沒有警告出現(xiàn).

VII. 將Project Settings" 中 "C++/C " 項(xiàng)目下優(yōu)化選項(xiàng)改為Disbale(Debug)。編譯器的優(yōu)化可能導(dǎo)致許多意想不到的錯誤,請參http://www.pgh.net/~newcomer/debug_release.htm

1. 此外對RELEASE版本的軟件也可以進(jìn)行調(diào)試,請做如下改動:

在"Project Settings" 中 "C++/C " 項(xiàng)目下設(shè)置 "category" 為 "General" 并且將"Debug Info"設(shè)置為 "Program Database"。

在"Link"項(xiàng)目下選中"Generate Debug Info"檢查框。

"Rebuild All"

如此做法會產(chǎn)生的一些限制:

無法獲得在MFC DLL中的變量的值。

必須對該軟件所使用的所有DLL工程都進(jìn)行改動。

另:

MS BUG:MS的一份技術(shù)文檔中表明,在VC5中對于DLL的"Maximize Speed"優(yōu)化選項(xiàng)并未被完全支持,因此這將會引起內(nèi)存錯誤并導(dǎo)致程序崩潰。

2. http://www.sysinternals.com/有一個程序DebugView,用來捕捉OutputDebugString的輸出,運(yùn)行起來后(估計(jì)是自設(shè)為system debugger)就可以觀看所有程序的OutputDebugString的輸出。此后,你可以脫離VC來運(yùn)行你的程序并觀看調(diào)試信息。

3. 有一個叫Gimpel Lint的靜態(tài)代碼檢查工具,據(jù)說比較好用http://www.gimpel.com/ 不過要化$的。

參考文獻(xiàn):

1) http://www.cygnus-software.com/papers/release_debugging.html

2) http://www.pgh.net/~newcomer/debug_release.htm

posted on 2009-07-08 04:35 七星重劍 閱讀(6499) 評論(15)  編輯 收藏 引用 所屬分類: IDE -- visual c++Debug

FeedBack:
# re: 莫偷懶!成員變量一定要初始化! 2009-07-08 09:36 秒大刀
有同感。一旦出現(xiàn)問題代價會非常大,而且不初始化的變量給以后的維護(hù)工作帶來巨大的壓力,出了bug也很難查
不省那點(diǎn)初始化的性能,讓代碼安全點(diǎn)  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2009-07-08 15:07 唐風(fēng)
!!
七星重劍,出刃見血,哈哈。
學(xué)習(xí)了!  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2009-07-08 21:46 waterpg
我也遇到過一次類似的問題
在release下面總出現(xiàn)一些奇怪的數(shù)據(jù),但是在debug下面一切正常
結(jié)果就是有幾個變量沒初始化
但調(diào)試又很麻煩,結(jié)果盯著程序猛看,竟然看出來了~~
后來再寫程序,只要能初始化就習(xí)慣性地初始化了  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2009-07-12 21:25 nosound
未初始化的成員變量,其值是“未定義”,而不是“Debug是False,Release是True”。
“未定義”的意思是“可能出現(xiàn)一切可能的值”  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2009-07-14 00:55 七星重劍
@nosound
嗯,對頭,值不一定  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2010-03-12 16:59 Butler22Lesley
Specialists claim that <a href="http://lowest-rate-loans.com/topics/personal-loans">personal loans</a> help a lot of people to live their own way, because they are able to feel free to buy needed things. Furthermore, banks offer student loan for all people.   回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2010-04-04 20:46 paper services
fantastic long post!! This post very makes substance and is very very good. Though I didn’t get time to find out the whole post, I think I’ll read part by part. This is a very good option for students, who has no writing ability, instead of simply ussing paper services.  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2010-04-06 07:50 dissertation
Fantabulous article just about school! No doubts all of us meet whatever problems with dissertation writing. It is particularly problematic when you get another vantage in life. I have had the identical problems until I have see a company supply experienced writing services.  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2010-04-10 12:26 essays help
The essay writing service could be organized peculiarly for college students, just because they need the critical essays written correctly.   回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2010-04-18 15:45 paper writing
Really a informative and edifying post, the post is smashing in all regards,I am pleased to read this post. If every single writer is as good as you are, people will ne'er have problems with buy paper. Thanks.  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化![未登錄] 2010-07-14 17:39 jerry
是的
我也是遇到了這個問題
搞了兩天才發(fā)現(xiàn) 原來是一個類成員的布爾型私有變量沒有初始化
而且在windows下的vs2008編譯運(yùn)行 一切正常 結(jié)果也對
而在linux下編譯運(yùn)行沒有任何意外 可是就是結(jié)果不對
一直跟蹤到內(nèi)部才發(fā)現(xiàn)原來是有個bool變量沒有初始化
faint!
不過好像vs2008對于其沒有初始化的布爾型私有變量的賦值是true吧
好象不是false哦
而其無論是debug模式還是release模式好像都是一樣的
不知道是不是這樣  回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2010-07-24 08:40 europe essays
When people are not sure what to select, essay or humanities essays paper, they can turn to you, just because you know the way to create the hot theme associated with this good topic.   回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2010-08-11 22:34 book reports essay paper
Don't you acknowledge what freedom looks like? At time you do not complete your technology essays paper, but custom papers writing service provides you with research paper, you will bw able to see the real freedom.   回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2011-09-25 14:37 articles submit
In fact, I require article submissions stuff offered by article submission directory company. I heard that was a very efficient system of online business optimization.   回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2011-09-30 04:03 term paper online
If you are embarrassed and do not know the way to create the annotated bibliography writing, you would have an opportunity to buy custom essay in the modern research paper writing service. That can save valuable time.   回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2011-09-30 05:14 writing essays
Not every high school student is faultless. Moreover, I guess that a professional essay service should assist every student with an essay term paper completing.   回復(fù)  更多評論
  
# re: 莫偷懶!成員變量一定要初始化! 2012-08-21 07:37 essay writing services uk
You should go for this writing service when you wish to acquire papers service uk. Log ontoWeb site (supremeessays.co.uk) and take a break.  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              免费永久网站黄欧美| 欧美电影免费观看高清| 久色婷婷小香蕉久久| 亚洲一区二区三区免费视频| 亚洲巨乳在线| 一本色道久久88精品综合| 亚洲美女性视频| 一区二区三区不卡视频在线观看| 亚洲免费成人av| 一区二区三区|亚洲午夜| 亚洲图中文字幕| 欧美在线观看你懂的| 久久久综合香蕉尹人综合网| 欧美成年网站| 99热这里只有精品8| 亚洲宅男天堂在线观看无病毒| 久久av免费一区| 欧美精品一区二区蜜臀亚洲| 国产精品美女一区二区| 国内精品久久久久久影视8| 日韩亚洲欧美精品| 午夜精品三级视频福利| 香蕉av777xxx色综合一区| 夜夜精品视频一区二区| 一本一本久久| 一道本一区二区| 日韩视频免费大全中文字幕| 久久一区激情| 一本色道久久综合亚洲精品不卡| 久久激情五月激情| 欧美午夜精品久久久久久浪潮| 国产日产精品一区二区三区四区的观看方式 | 免费在线国产精品| 久久精品国产欧美激情| 欧美成人按摩| 国产精品h在线观看| 国产一区二区剧情av在线| 一区二区三区毛片| 久久嫩草精品久久久精品| 亚洲美女毛片| 国产精品都在这里| 久久九九国产精品怡红院| 久久成人精品视频| 久久国产精品久久久久久电车| 国产精品高潮视频| 欧美日韩一区在线播放| 夜久久久久久| 男同欧美伦乱| 国产精品亚洲片夜色在线| 美女黄毛**国产精品啪啪 | av成人国产| 久久狠狠亚洲综合| 欧美一区二区三区啪啪| 欧美精品一区二区三区高清aⅴ| 国产欧美在线观看| 亚洲一区尤物| 亚洲另类一区二区| 欧美激情一级片一区二区| 在线观看日韩www视频免费 | 免费成人av资源网| 久久狠狠一本精品综合网| 国产日韩精品一区二区| 午夜精品久久久久久久久| 一本大道av伊人久久综合| 欧美激情一区二区三区全黄| 亚洲精品黄色| 99re国产精品| 国产精品女人毛片| 欧美亚洲网站| 欧美一级视频精品观看| 国产日韩欧美一二三区| 久久精品国产99国产精品澳门| 亚洲欧美色一区| 国产亚洲欧美一区二区| 久久久久久久久伊人| 久久人人看视频| 亚洲伦理在线| 亚洲视频精选在线| 国产精品毛片va一区二区三区| 欧美一区二区在线| 久久久久看片| 9久草视频在线视频精品| 在线视频精品一区| 国产一区二区观看| 欧美黄色精品| 国产精品成人免费精品自在线观看| 亚洲综合欧美日韩| 久久av在线看| 99在线热播精品免费| 午夜精品久久久久久久99水蜜桃| 黄色av一区| 日韩午夜精品| 国内精品久久久久久影视8| 欧美不卡在线视频| 国产精品免费视频xxxx| 老司机午夜免费精品视频| 欧美高潮视频| 欧美在线亚洲在线| 美日韩丰满少妇在线观看| 亚洲小说欧美另类社区| 久久国产精品久久久久久久久久| 99国产精品国产精品毛片| 亚洲欧美一区二区视频| 亚洲精品国产拍免费91在线| 亚洲影院色在线观看免费| 亚洲国产精品免费| 亚洲欧美成人网| 亚洲尤物视频网| 在线观看91精品国产入口| 亚洲激情偷拍| 欧美日韩国产二区| 亚洲欧美卡通另类91av| 欧美在线视频观看免费网站| 国产综合久久久久久鬼色| 亚洲国产天堂久久综合网| 国产日韩欧美在线看| 亚洲精品黄色| 激情综合五月天| 中文亚洲字幕| 国产视频一区三区| 亚洲视频免费观看| 亚洲人成在线播放| 久久国产一二区| 欧美在线观看日本一区| 欧美色偷偷大香| 亚洲电影观看| 亚洲国产一二三| 久久久福利视频| 久久久青草婷婷精品综合日韩| 国产精品一区二区久久精品| 亚洲国产免费| 99国产精品国产精品久久| 欧美精品在线免费播放| 鲁大师成人一区二区三区| 国产午夜精品理论片a级大结局| 欧美国产一区二区| 国产精品美女黄网| 亚洲一区二区综合| 亚洲一区二区三区乱码aⅴ| 欧美日韩国产在线播放| 日韩视频永久免费| 夜夜躁日日躁狠狠久久88av| 欧美激情精品久久久久久大尺度| 欧美激情一区二区三区四区| 亚洲国产精品激情在线观看| 久久偷看各类wc女厕嘘嘘偷窃| 老色鬼精品视频在线观看播放| 一区精品在线播放| 久久精品噜噜噜成人av农村| 麻豆视频一区二区| 亚洲激情在线视频| 欧美精品一区二区三区蜜桃 | 国产精品久久久久aaaa樱花| 99精品视频一区二区三区| 亚洲精品五月天| 欧美日韩精品一区| 亚洲午夜未删减在线观看| 欧美一级大片在线观看| 国产日韩在线一区二区三区| 久久精品五月婷婷| 亚洲国产精品精华液2区45| 日韩午夜av电影| 国产精品午夜在线观看| 久久精品盗摄| 亚洲人成在线观看一区二区| 亚洲欧美电影在线观看| 国际精品欧美精品| 看片网站欧美日韩| 亚洲午夜国产一区99re久久| 久久精品日产第一区二区| 亚洲国产精品久久精品怡红院| 欧美日韩999| 欧美一区1区三区3区公司| 亚洲欧洲一二三| 国产精品国产三级国产专播品爱网 | 亚洲欧美另类综合偷拍| 国产精品午夜国产小视频| 久久精品人人做人人综合 | 欧美一区二区三区免费观看| 媚黑女一区二区| 亚洲一二三区精品| 在线成人免费观看| 国产精品白丝av嫩草影院| 亚洲精品欧美日韩| 久久九九国产| 亚洲天堂成人在线观看| 黄色精品在线看| 国产精品色一区二区三区| 女仆av观看一区| 久久成人免费| 一区二区三区视频在线| 亚洲成人在线视频播放| 久久国产视频网站| 中文国产成人精品久久一| 亚洲二区在线观看| 国产一区二区三区在线观看免费| 欧美色欧美亚洲高清在线视频| 欧美成人午夜| 免费成人黄色av| 久久综合九九|