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