關(guān)于bin和obj文件夾。debug 和release的區(qū)別(轉(zhuǎn))
(2010-04-19 14:11:14)
bin是放最終代碼的目錄
obj就放中間代碼的目錄
release和debug是不同的運(yùn)行方式
debug會(huì)增加調(diào)試代碼,方便調(diào)試。調(diào)試完后,用release版本發(fā)布,沒有調(diào)試代碼,減小程序體積,加快執(zhí)行速度!Top
既然obj就放中間代碼的目錄,為什嗎還要release呢?同理,既然bin是放最終代碼的目錄還要debug干什嗎?不是多此一舉嗎?Top
哎!
一、先說說
編譯:
編譯一個(gè)源程序文件,要經(jīng)過
語法、類型,甚至要判斷執(zhí)行時(shí)的可行性等。
是一個(gè)對(duì)文件多次掃描的過程,最后還有代碼優(yōu)化的過程。會(huì)有一大堆的中間文件產(chǎn)生。vc6下的一個(gè)mfc項(xiàng)目
obj目錄里會(huì)有好幾M的中間(臨時(shí))文件。
再復(fù)雜點(diǎn),一個(gè)project有圖片(聲音)等資源文件,要調(diào)用其他DLL類庫(可能是.net組件,可能是com),還可能由多個(gè).cs文件組成。要把
這么多東西連接在一起。以前在DOS下用C或PASCAL,要先編譯成.obj文件,再用link.exe連接在一起,才是一個(gè)exe文件。(記得
pascal還是fortran要用兩個(gè)編譯程序才能得到一個(gè).obj的中間文件)
結(jié)論:編譯需要大量的中間文件存放臨時(shí)結(jié)果,為下一步做準(zhǔn)備。C#是面向?qū)ο蟮膹?fù)雜度更高!obj目錄就是用來存放臨時(shí)文件的!
二、debug
&
release
debug調(diào)試,你在程序中設(shè)置了斷點(diǎn),為什么vs.net知道在那里要停下來,當(dāng)你把鼠標(biāo)移到某個(gè)變量上,vs.net就會(huì)顯示它當(dāng)時(shí)的值?
因?yàn)榫幾g器在代碼中添加了許多調(diào)試需要的代碼,可以讓vs.net得到,返回給你。
這些代碼當(dāng)然是要占用空間和時(shí)間的,在你的程序調(diào)試完了后,可以正確運(yùn)行了。完全可以去掉這些代碼,這時(shí)候就應(yīng)該用Release模式了。
不管Debug還是Release模式,都要編譯,都有中間臨時(shí)代碼產(chǎn)生,所以obj目錄下有debug
release目錄。兩種模式編譯的結(jié)果,就放在bin目錄下。
編譯完后,中間臨時(shí)代碼是沒什么用的了,所以一般不管obj目錄里的東西!
各位說說,我是不是可以去寫書了? :)
在用VC編譯是,有debug和release兩種
有什么區(qū)別呢
一個(gè)為調(diào)試版本,其中包括了出錯(cuò)時(shí)能夠定位源代碼的在行,如果源文件已經(jīng)改變,定位出來會(huì)有偏移,而且,在這個(gè)版本中編譯器不會(huì)進(jìn)行代碼優(yōu)化,并且在程序中能用宏定義_DEBUG來確定當(dāng)前的版本。另一個(gè)為正試版本,程序出錯(cuò)只是進(jìn)行簡單的錯(cuò)誤處理,編譯器會(huì)優(yōu)化代碼,以提高性能。
Release代碼更小,執(zhí)行更快,編譯更嚴(yán)格,更慢
當(dāng)然就沒有了調(diào)試信息
經(jīng)常你會(huì)遇到DEBUG成功的版本RELEASE
就有問題,以下是問題的分析總結(jié)
DEBUG和RELEASE
版本差異及調(diào)試相關(guān)問題:
.
內(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
|