Windows程式除錯 除錯版本和發布版本的區別

2021-04-21 07:16:00 字數 2226 閱讀 9492

除錯版本和發布版本的區別

除錯版本的編譯選項

鏈結選項

含義/mdd

,/mld

,或者/mtd

使用除錯版本的執行時刻函式庫

/od關閉優化開關

/d」_debug」

開啟條件編譯除錯**開關

/zi建立編輯繼續的程式資料庫

/gz在除錯版本中捕獲除錯版本的錯誤

/gm開啟最小化重新鏈結開關,減少鏈結時間

發布版本的編譯選項

鏈結選項

含義/md

,/ml

,或者/mt

使用發布版本的執行時刻函式庫

/o1,或者

/o2開啟優化開關,使得程式會最小或者說速度最快

/d」ndebug」

關閉條件編譯除錯**開關(具體說就是

ansic

的assert

函式)/gf

消除重複字串,並將字串放到唯讀記憶體中,從而避免它們被錯誤地修改

還有其他多種編譯選項(特別是

/fd、

/fo、

/fp)被用來管理

debug

與release

目錄下的輸出檔案。

實際上,除錯版本使用了一組選項來幫助進行除錯,而發布版本也使用了一組選項來產生高效的**。在發布版中也可以有帶有除錯符號、跟蹤語句、斷言語句的發布版本,只要選者這些項,因為編譯器不關心也絲毫意識不到這兩個版本的差異。

乙個發布版本一般意味著某些型別的優化,然而乙個除錯版本意味著沒有優化。

使用除錯版本的執行時刻函式庫

除了有除錯符號,最重要的區別在於除錯版本的執行時刻函式庫使用了除錯堆(

heap)

重要特性的概要總結

l除錯版本的執行時刻函式庫對記憶體的分配作了跟蹤,並允許使用者檢車記憶體洩露; l

在剛分配的記憶體裡寫上

0xcd

的位元組模式,這有助於發現使用未被初始化資料的錯誤; l

在被釋放的記憶體裡寫上

0xcd

的位元組模式,這有助於發現使用已被釋放的記憶體; l

在緩衝區的兩邊分配了四位元組的保護資料,並用

0xfd

的位元組模式作初始化,來檢查寫記憶體的上溢位和下溢位; l

在每個記憶體分配的地方對源**檔名和行號作了記錄,這有助於使用者在源**中對記憶體分配進行定位;

發布版優化內容:

ø堆疊幀省略 ø

異常優化 ø

變數優化

優化錯誤確定方式:

l完全關掉優化 l

使用更安全的優化形式,如對**的大小作優化而不是對速度作優化 l

選定某些檔案關掉優化或者作更安全的優化 l

使用#pragma optimize

對選定的**關掉優化

在除錯版本中捕獲發布版本中的錯誤

/gz編譯選項會做一些事情 1.

用0xcc

位元組模式初始化所有的自動變數,這使得使用未被初始化的指標會導致非法記憶體訪問異常 2.

當通過函式指標調研能夠函式時,會通過檢查堆疊指標來檢驗函式呼叫的匹配性 3.

在函式末尾檢查堆疊指標,確認它沒有被修改  

除錯發布版本

為程式的某個版本建立除錯符號,要對程式所對應的visual c++專案作如下設定:

1.開啟工程設定對話方塊,在settings for對話方塊中選擇所需要的版本(例如「win32 release」)。

2.在工程控制樹里,通過單擊根節點擊擇整個工程。

3.在c/c++標籤裡選擇commman類。在除錯資訊裡,如果發布版本則選擇program database,如果是除錯版本則選擇program database for edith continue(注意,編輯繼續選項與優化連鏈結不相容,而且它還增大可執行檔案的長度,從而不適合於發布版本)。

4.在link標籤裡選擇debug類,然後選擇debug info和microsoft format選項。

記住不要選擇sperate types選項,這樣所有的除錯資訊才會被合併到單獨的乙個pdb檔案中。另外,如果i需要做折後除錯的對映檔案時,記住要選擇產生genrate mapfile選項。

5。對於發布版本,選擇link標籤,在project options對話方塊的後面加上「/optref」。這個選項使得不被引用的函式和資料不會出現可執行檔案中,從而避免了檔案無謂的增大。對於除錯本本不要使用這個選項,因為它會變比增量連線(incremental linking)。

6.使用rebuild all命令重新編譯整個工程。

Windows服務程式的除錯

摘自 msdn 1.由於服務必須從服務控制管理器的上下文中執行,而不是從 visual studio 中執行,因此除錯服務不像除錯其他 visual studio 應用程式型別那樣簡單。若要除錯服務,必須首先啟動服務,然後將乙個偵錯程式附加到正在執行服務的程序中 attachtoprocess 附加...

drwtsn32 除錯windows程式

一直忙著除錯 寫伺服器的 有時候真叫人鬱悶,鬱悶的是要高效能的保持程式繼續執行n多天還沒有事情,本來這也是程式設計師該做的事情,但是有時候一些長期積累下來的問題會造成程式指明性的打擊 在寫這個程式的時候,本機除錯 的時候都沒有遇到任何記憶體洩漏的問題,除錯的時候都很清晰,但是到客戶那裡執行一天到兩天...

windows環境除錯

一 除錯 1 除錯 debug 又稱除錯,是發現和減少電腦程式和電子儀器中程式錯誤的乙個過程 2 除錯的步驟 發現程式錯誤的存在 以隔離 將 分成一塊一塊 消除等方式對錯誤進行定位 確定錯誤產生的原因 提出糾正錯誤的解決辦法 對程式錯誤予以改正 3 debug和release debug 除錯版本,...