除錯版本和發布版本的區別
除錯版本的編譯選項
鏈結選項
含義/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 除錯版本,...