重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
這篇文章將為大家詳細(xì)講解有關(guān)Release版錯(cuò)誤是怎樣產(chǎn)生的,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
ReleaseCandidate(RC)候選版本,用于指軟件或操作系統(tǒng)的發(fā)布,一般與Debug版本相對(duì)應(yīng),后者可以調(diào)試,包括了每個(gè)執(zhí)行碼對(duì)應(yīng)的源代碼信息,而一般過(guò)了測(cè)試版時(shí)期,基本沒(méi)有什么問(wèn)題后,會(huì)發(fā)布幾個(gè)略微不同的版本,就叫做rc1、rc2,然后從這里面挑選一個(gè)作為正式版本。Release版本去掉了。
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)。
下面列出了分別針對(duì)二者的選項(xiàng)
(當(dāng)然除此之外還有其他一些,如/Fd/Fo,但區(qū)別并不重要,通常他們也不會(huì)引起Release版錯(cuò)誤,在此不討論)
Release版本出錯(cuò)情況
/MD/ML或/MT使用發(fā)布版本的運(yùn)行時(shí)刻函數(shù)庫(kù)
/O1或/O2優(yōu)化開(kāi)關(guān),使程序最小或最快
/D"NDEBUG"關(guān)閉條件編譯調(diào)試代碼開(kāi)關(guān)(即不編譯assert函數(shù))
/GF合并重復(fù)的字符串,并將字符串常量放到只讀內(nèi)存,防止被修改
實(shí)際上,Debug和Release并沒(méi)有本質(zhì)的界限,他們只是一組編譯選項(xiàng)的集合,編譯器只是按照預(yù)定的選項(xiàng)行動(dòng)。事實(shí)上,我們甚至可以修改這些選項(xiàng),從而得到優(yōu)化過(guò)的調(diào)試版本或是帶跟蹤語(yǔ)句的發(fā)布版本。
有了上面的介紹,我們?cè)賮?lái)逐個(gè)對(duì)照這些選項(xiàng)看看Release版錯(cuò)誤是怎樣產(chǎn)生的
RuntimeLibrary
鏈接哪種運(yùn)行時(shí)刻函數(shù)庫(kù)通常只對(duì)程序的性能產(chǎn)生影響。
調(diào)試版本的RuntimeLibrary包含了調(diào)試信息,并采用了一些保護(hù)機(jī)制以幫助發(fā)現(xiàn)錯(cuò)誤,因此性能不如發(fā)布版本。編譯器提供的RuntimeLibrary通常很穩(wěn)定,不會(huì)造成Release版錯(cuò)誤;倒是由于Debug的RuntimeLibrary加強(qiáng)了對(duì)錯(cuò)誤的檢測(cè),如堆內(nèi)存分配,有時(shí)會(huì)出現(xiàn)Debug有錯(cuò)但Release正常的現(xiàn)象。應(yīng)當(dāng)指出的是,如果Debug有錯(cuò),即使Release正常,程序肯定是有Bug的,只不過(guò)可能是Release版的某次運(yùn)行沒(méi)有表現(xiàn)出來(lái)而已。
關(guān)于“Release版錯(cuò)誤是怎樣產(chǎn)生的”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。