VS中Dubug和Release的詳細區別

2021-10-04 03:57:33 字數 982 閱讀 9979

debug 和 release 並沒有本質的區別,他們只是vc預定義提供的兩組編譯選項的集合,編譯器只是按照預定的選項行動。如果我們願意,我們完全可以把debug和release的行為完全顛倒過來。當然也可以提供其他的模式,例如自己定義一組編譯選項,然後命名為my_abc等。習慣上,我們仍然更願意使用vc已經定義好的名稱。

conclusion:debug和release只是兩個編譯的選項而已,是編譯器所要進行工作的一系列指令,它們只是編譯指令的集合的名稱。

debug版本包括除錯資訊,所以要比release版本大很多(可能大數百k至數m)。至於是否需要dll支援,主要看你採用的編譯選項。如果是基於atl的,則debug和release版本對dll的要求差不多。如果採用的編譯選項為使用mfc動態庫,則需要mfc42d.dll等庫支援,而release版本需要mfc42.dll支援。release不對源**進行除錯,不考慮mfc的診斷巨集,使用的是mfc release庫,編譯時對應用程式的速度進行優化,而debug則正好相反,它允許對源**進行除錯,可以定義和使用mfc的 診斷巨集,採用mfc debug庫,對速度沒有優化。

conclusion:debug允許對原始碼進行除錯,而release則不對原始碼進行除錯

二者的詳細區分:

debug:debug通常稱為除錯版本,通過一系列編譯選項的配合,編譯的結果通常包含除錯資訊,而且不做任何優化,以為開發人員提供強大的應用程式除錯能力。

release:release通常稱為發布版本,是為使用者使用的,一般客戶不允許在發布版本上進行除錯。所以不儲存除錯資訊,同時,它往往進行了各種優化,以期達到**最小和速度最優。為使用者的使用提供便利。

(開發經驗,非常重要!!!)

1. 注意變數的初始化,尤其是指標變數,陣列變數的初始化(很大的情況下另作考 慮了)。

2. 自定義訊息及其他宣告的標準寫法

3. 使用除錯巨集時使用後最好注釋掉

4. 盡量使用 try - catch(…)

5. 盡量使用模組,不但表達清楚而且方便除錯。

AQS中的acquire方法release方法

aqs中的acquire方法解釋,首先呼叫 tryacquire方法判斷當前執行緒是否拿到鎖,沒有拿到的話執行addwaiter方法把失敗的這個執行緒打包成乙個節點,通過迴圈cas機制強行加入到佇列的尾部,該方法的返回值會返回這個節點,再打包交給acquirequeued方法,acquirequeu...

vc中debug版程式正常但release版崩潰

i.記憶體分配問題 1.變數未初始化。為debug中會自動給變數初始化found false,而在release版中 則不會。所以盡可能的給變數 類或結構初始化。2.資料溢位的問題 如 char buffer 10 int counter lstrcpy buffer,abcdefghik 在deb...

WTL安裝到VS2008和VS2010中

wtl是什麼就不說了,今天安裝的時候遇到了一些小問題,所以記錄下。wtl8.0只支援vs2005,不過只需要修改幾個小地方就可以在vs2008下用了。但是如果你的js檔案雙擊沒有執行而是用某個軟體開啟的話,可以開啟登錄檔hkey classes root js將右邊資料改為jsfile重新啟動下就可...