1. 程式人生 > >C++ 程式DEBUG和RELEASE版本的區別

C++ 程式DEBUG和RELEASE版本的區別

Relase版本對程式作了各種優化的,使得程式在大小和速度上達到最優。Debug版本,包含程式的除錯資訊,方便程式設計師做除錯。Relase版本是不利於程式的除錯。

Debug和Relase版本編譯選項
Debug 和 Release 的真正區別,在於一組編譯選項。

- Debug 版本
引數 含義
/MDd /MLd 或 /MTd 使用 Debug runtime library(除錯版本的執行時刻函式庫)
/Od 關閉優化開關
/D “_DEBUG” 相當於 #define _DEBUG,開啟編譯除錯程式碼開關(主要針對assert函式)
/ZI
建立 Edit and continue(編輯繼續)資料庫,這樣在除錯過程中如果修改了原始碼不需重新編譯
GZ 可以幫助捕獲記憶體錯誤

- Release 版本
引數含義
/MD /ML 或 /MT 使用釋出版本的執行時刻函式庫
/O1 或 /O2 優化開關,使程式最小或最快
/D “NDEBUG” 關閉條件編譯除錯程式碼開關(即不編譯assert函式)
/GF 合併重複的字串,並將字串常量放到只讀記憶體,防止被修改

上面是windows編譯的一些常用的選項。

一些常見的錯誤

  1. 變數

DEBUG版本程式執行正常,但是Release版本卻有問題,這是大家最容易犯的一個錯誤,所以變數初始化是一個好的習慣。

Debug跟Release在初始化變數時所做的操作是不同的,
Debug是將每個位元組位都賦成0xcc(注1),而Release的賦值近 似於隨機。所以一些控制流程的時候不按照預設的路線走。

  1. ASSERT

Assert巨集,主要是在DEBUG除錯的時候用,真正程式執行時不允許程式的中斷的。

相關推薦

C++ 程式DEBUGRELEASE版本區別

Relase版本對程式作了各種優化的,使得程式在大小和速度上達到最優。Debug版本,包含程式的除錯資訊,方便程式設計師做除錯。Relase版本是不利於程式的除錯。 Debug和Relase版本編譯選項 Debug 和 Release 的真正區別,在於一組編

C++ debugrelease版本區別及除錯技巧

一、Debug 和 Release 編譯方式的本質區別    Debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。Release 稱為釋出版本,它往往是進行了各種優化,使得程式在程式碼大小和執行速度上都是最優的,以便使用者很好地使用。  

debugrelease版本區別

模式 exe 信息 容量 都是 release 中斷 編譯 一個 Debug:調試版本,包含調試信息,所以容量比Release大很多,並且不進行任何優化(優化會使調試復雜化,因為源代碼和生成的指令間關系會更復雜),便於程序員調試。 Debug模式下生成兩個文件,除了.e

VC中debugrelease版本區別

vc中debug和release的不同 收藏  在使用VC開發軟體的過程中,正當要享受那種興奮的時候突然發現:release與debug執行結果不一致,甚至出錯,而release又不方便除錯,真的是當頭一棒啊,可是疼歸疼,問題總要解決,下面將講述一下我的幾點經驗,看

cordova環境搭建以及將vue的webapp打包成ios安卓的debugrelease版本app

簡介 cordova可以幫我們將一個webApp打包成安卓apk和ios的App,本文詳細描述了cordova的環境搭建以及打包vue專案的webapp成手機端的App的詳細過程,打包的app分為debug版本的除錯版以及能上線的release版本,其中都會做詳細介紹,文章中會也會描述整個環節遇

VS2015編譯GEOS的debugrelease版本

image 雙擊 cmake efi 找到 makefile 嘗試 man 命令 目前GEOS最新的3.7.1版本支持camke進行編譯。經過嘗試發現通過cmake生成的工程在vs2015下面編譯的時候還是存在問題,而且在中文網上也沒找到解決方案。 所以還是采用了nmak

ios 學習之 debugrelease版本的執行

不管在什麼平臺上軟體都有debug和release版本的差別,雖然本質上都是-O -g這些選項的差別,對應與開發著debug和release更多的概念上的差別,debug是面向自己的release是面向客戶的。 我們說一下在xcode上怎麼配置debug和release。

cmake編譯DebugRelease版本的注意點

在CMakeLists.txt中首先可以定義編譯的模式到底是Debug版本還是Release版本,在Terminal中直接編譯,也可以進行引數定義,不進行特殊定義應該都是Release版本。 但是LZ剛開始使用的是Kdevelop這個IDE,然後就刷刷刷nex

DEBUGRELEASE區別

在網上看到的一篇轉載過來 經常在 CSDN 上看見有人問 Debug 執行正常但 Release 失敗的問題。以往的討論往往是 經驗性的,並沒有指出會這樣的真正原因是什麼,要想找出真正的原因通常要憑運氣。最 近我看了一些這方面的書,又參考了 CSDN 上的一些帖子,然後深入研究了一下關於二者 的不同。以

vs中的程序有debugrelease兩個版本區別

不同的 上進 BE 使用 的區別 debug 存在 通過 最優 vs中的程序有debug和release兩個版本,Debug通常稱為調試版本,通過一系列編譯選項的配合,編譯的結果通常包含調試信息,而且不做任何優化,以為開發 人員提供強大的應用程序調試能力。而Release通

Android debugrelease版本區別, 涉及到的混淆

1.背景 有關debug,release版本的問題,還有混淆 ,今天查到了一篇csdn的部落格,為了讓自己記憶更深刻,自己再敲一遍加深印象!本文只記錄一些簡單的概念,沒有深刻研究! 2.參考 因為是借用的嘛!標註一下,我現在判別不出他們寫的好不

DebugRelease區別

包含 自己 cat 發布 問題 一次 版本 catch 聲明 Debug 和 Release 的區別 Debug 通常稱為調試版本,它包含調試信息,並且不作任何優化,便於程序員調試程序。Release 稱為發布版本,它往往是進行了各種優化,使得程序在代碼大小

maven snapshotrelease版本區別(轉)

依賴 註意 發行版 str 設置 方便 版本更新 版本庫 編譯打包 在使用maven過程中,我們在開發階段經常性的會有很多公共庫處於不穩定狀態,隨時需要修改並發布,可能一天就要發布一次,遇到bug時,甚至一天要發布N次。我們知道,maven的依賴管理是基於版本管理的,對於發

項目發布DebugRelease版的區別

pdb 斷點 關閉 ont and echart TE har 討論 https://www.cnblogs.com/taiyonghai/p/6126074.html 一、Debug和Release的區別   Debug:調試版本,包含調試信息,所以容量比Releas

1 疑惑處理 WebService的兩種方式SoapRest比較 專案釋出DebugRelease版的區別

1 webservice response 和 return 的區別    WebService的兩種方式Soap和Rest比較 2 debug release 生成檔案的區別     專案釋出Debug和Release版的區別 3 iis 整合和經典 管道的區別 ht

cmakelist中區分debugrelease下對應的庫版本

add_library(${LIBRARY_NAME} ${SOURCES} ${HEADERS})//生成一個對應的Debug庫,用來與Release版本的庫區分set_target_properties(${LIBRARY_NAME} PROPERTIES OUTPUT_NAME "${LIBR

玩轉Windows服務系列——DebugRelease版本的註冊解除安裝,及其原理

Windows服務Debug版本 註冊 Services.exe -regserver 解除安裝 Services.exe -unregserver Windows服務Release版本 註冊 Services.exe -service 解除安裝 Services

BuildConfig自定義欄位在debug模式release版本的使用

專案開發中有一些基本地址和debug的狀態在開發和上線的時候是不一樣的,一般我們在java類中建立相應的欄位和變數,然後在產品上線的時候手動的去改變這些欄位和變數。然而,在studio中則為我們提供一個類BuildConfig這個類,為我們更加簡單的管理這些欄位和變數提供了

徹徹底底理解C++中指針引用的區別

c++ 區別 include 分享 sin style void png alt #include<iostream> using namespace std; void test(int **p) {   int a=2;   *p=&a;   

debugrelease下PostThreadMessage的異同

hand 應該 clas 發現 cst b- cstring 被調用 gin MFC中創建線程分為工作線程和UI線程。其中UI線程可以通過繼承CWinThread進行創建。 創建函數如下: CWinThread *m_pRecogThread;//語音識別線