六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦 > 知識大全 > 知識百科 > 百科知識 > .net debug和release的區(qū)別

.net debug和release的區(qū)別

時間: 淑航658 分享

.net debug和release的區(qū)別

  你知道.net debug指的是什么嗎?release指的又是什么呢?兩者之間有什么區(qū)別呢?下面就讓學(xué)習(xí)啦小編來告訴你.net debug和release的區(qū)別吧。

  .net debug和release的區(qū)別一

  Debug 通常稱為調(diào)試版本,它包含調(diào)試信息,并且不作任何優(yōu)化,便于程序員調(diào)試程序。Release 稱為發(fā)布版本,它往往是進行了各種優(yōu)化,使得程序在代碼大小和運行速度上都是最優(yōu)的,以便用戶很好地使用。

  Debug 和 Release 的真正區(qū)別,在于一組編譯選項。

  Debug 版本

  參數(shù)含義

  /MDd /MLd 或 /MTd 使用 Debug runtime library(調(diào)試版本的運行時刻函數(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)存錯誤

  Release 版本 參數(shù)含義

  /MD /ML 或 /MT 使用發(fā)布版本的運行時刻函數(shù)庫

  /O1 或 /O2 優(yōu)化開關(guān),使程序最小或最快

  /D "NDEBUG" 關(guān)閉條件編譯調(diào)試代碼開關(guān)(即不編譯assert函數(shù))

  /GF 合并重復(fù)的字符串,并將字符串常量放到只讀內(nèi)存,防止被修改

  .net debug和release的區(qū)別二

  1. 變量。

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

  2. 自定義消息的消息參數(shù)。

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

  3. release模式下不出錯,但debug模式下報錯。

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

  4. ASSERT, VERIFY, TRACE..........調(diào)試宏。

  這種情況很容易解釋。舉個例子:請在VC下輸入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í)行,這里的作用就不多追究了,有興趣可自己研究:)。

  .net debug和release的區(qū)別三

  Debug與Release不同的問題在剛開始編寫代碼時會經(jīng)常發(fā)生,99%是因為你的代碼書寫錯誤而導(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)試。


看了.net debug和release的區(qū)別的人還看:

1.Linux CentOS 6怎么換更新源

2.CentOS系統(tǒng)怎么安裝VLC播放器

3.CentOS怎么安裝Adobe Flash Player

4.怎么查看linux操作系統(tǒng)

1207910