编译成debug版本
① cmake 如何编译成debug版
回复 7# qfmeal 这些参数是make工具的,--debug 只会让make在调用编译器gcc/g++干活的时候打印更多的东西,让你看到它详细的分析和处理指令的过程。
② debug和release两种编译方法的区别与联系
Debug 为调试版本,Release 为发布版本,从开发者和用户视角看,他们的区别如下:
一、从开发者视角,Debug和Release的区别,主要是编译器的选项不同,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 合并重复的字符串,并将字符串常量放到只读内存,防止被修改
二、使用者视角,我们下载软件的时候,一般应该选择Release版。Debug一般比测试版更粗,主要提供给高级测试者反馈修改意见。
③ vs中debug和release版本的区别
vs中的程序有debug和release两个版本,debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发
人员提供强大的应用程序调试能力。而release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信
息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。
debug程序通常比release程序要慢,尤其是处理视频方便release要比debug快很多。
debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc,
而release的赋值近似于随机。
代码存在错误在debug方式下可能会忽略而不被察觉到。debug方式下数组越界也大多不会出错,在release中就暴露出来了,这个找起来就比较难了。
只有debug版的程序才能设置断点、单步执行、使用
trace/assert等调试输出语句。realease不包含任何调试信息,所以体积小、运行速度快。
④ vs中debug和release版本的区别
vs中的程序有debug和release两个版本。
1、版本不同
Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。
而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。
2、运行效果不同
debug程序通常比release程序要慢,尤其是处理视频方便release要比debug快很多。
3、算法不同
debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc, 而release的赋值近似于随机。
(4)编译成debug版本扩展阅读:
二者的编译选项。
Debug 版本:
/Od 关闭优化开关
/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)
/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译
/GZ 可以帮助捕获内存错误
/Gm 打开最小化重链接开关,减少链接时间
Release 版本:
/MD /ML 或 /MT 使用发布版本的运行时刻函数库
/O1 或 /O2 优化开关,使程序 最小或最快
/D "NDEBUG" 关闭条件编译调试代码开关(即不编译assert函数)
/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改
可以理解Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。
⑤ C语言dev c++,选项release,debug,profiling什么意思
debug调试,release发行版,profiling性能分析。
作用:
debug可以对软件进行单步执行,堆栈跟踪,调试等操作来发现bug。
release如果最终调试后程序没有明显bug,可以作为可用的软件分享给他人使用就可以使用这个选项编译。
profiling可以对软件执行过程中的cpu利用率,内存占有进行分析,也可以用来发现,分析异常,bug。
(5)编译成debug版本扩展阅读:
区别
主要是针对其面向的目标不同的而进行区分的。
Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。Debug版本包括调试信息,所以要比Release版本大很多。是否需要DLL支持,主要看采用的编译选项。如果是基于ATL的,则Debug和Release版本对DLL的要求差不多。
而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。
⑥ Debug鐗堟湰鍜孯elease鐗堟湰链変粈涔埚尯鍒锻锛
涓銆丏ebug 鍜 Release 缂栬疟鏂瑰纺镄勬湰璐ㄥ尯鍒
Debug 阃氩父绉颁负璋冭瘯鐗堟湰锛屽畠鍖呭惈璋冭瘯淇℃伅锛屽苟涓斾笉浣滀换浣曚紭鍖栵纴渚夸簬绋嫔簭锻樿皟璇旷▼搴忋俣elease 绉颁负鍙戝竷鐗堟湰锛屽畠寰寰鏄杩涜屼简钖勭崭紭鍖栵纴浣垮缑绋嫔簭鍦ㄤ唬镰佸ぇ灏忓拰杩愯岄熷害涓婇兘鏄链浼樼殑锛屼互渚跨敤鎴峰緢濂藉湴浣跨敤銆
Debug 鍜 Release 镄勭湡姝g桦瘑锛屽湪浜庝竴缁勭紪璇戦夐”銆备笅闱㈠垪鍑轰简鍒嗗埆阍埚逛簩钥呯殑阃夐”锛埚綋铹堕櫎姝や箣澶栬缮链夊叾浠栦竴浜涳纴濡/Fd /Fo锛屼絾鍖哄埆骞朵笉閲嶈侊纴阃氩父浠栦滑涔熶笉浼氩紩璧 Release 鐗堥敊璇锛屽湪姝や笉璁ㄨ猴级
Debug 鐗堟湰锛
/MDd /MLd 鎴 /MTd 浣跨敤 Debug runtime library(璋冭瘯鐗堟湰镄勮繍琛屾椂鍒诲嚱鏁板簱)
/Od 鍏抽棴浼桦寲寮鍏
/D "_DEBUG" 鐩稿綋浜 #define _DEBUG,镓揿紑缂栬疟璋冭瘯浠g爜寮鍏(涓昏侀拡瀵
assert鍑芥暟)
/ZI 鍒涘缓 Edit and continue(缂栬緫缁х画)鏁版嵁搴掳纴杩欐牱鍦ㄨ皟璇曡繃
绋嬩腑濡傛灉淇鏀逛简婧愪唬镰佷笉闇閲嶆柊缂栬疟
/GZ 鍙浠ュ府锷╂崟銮峰唴瀛橀敊璇
/Gm 镓揿紑链灏忓寲閲嶉摼鎺ュ紑鍏筹纴鍑忓皯阈炬帴镞堕棿
Release 鐗堟湰锛
/MD /ML 鎴 /MT 浣跨敤鍙戝竷鐗堟湰镄勮繍琛屾椂鍒诲嚱鏁板簱
/O1 鎴 /O2 浼桦寲寮鍏筹纴浣跨▼搴忔渶灏忔垨链蹇
/D "NDEBUG" 鍏抽棴𨱒′欢缂栬疟璋冭瘯浠g爜寮鍏(鍗充笉缂栬疟assert鍑芥暟)
/GF 钖埚苟閲嶅岖殑瀛楃︿覆锛屽苟灏嗗瓧绗︿覆甯搁噺鏀惧埌鍙璇诲唴瀛桡纴阒叉
琚淇鏀
瀹为檯涓婏纴Debug 鍜 Release 骞舵病链夋湰璐ㄧ殑鐣岄檺锛屼粬浠鍙鏄涓缁勭紪璇戦夐”镄勯泦钖堬纴缂栬疟鍣ㄥ彧鏄鎸夌収棰勫畾镄勯夐”琛屽姩銆备簨瀹炰笂锛屾垜浠鐢氲呖鍙浠ヤ慨鏀硅繖浜涢夐”锛屼粠钥屽缑鍒颁紭鍖栬繃镄勮皟璇旷増链鎴栨槸甯﹁窡韪璇鍙ョ殑鍙戝竷鐗堟湰銆
浜屻佸摢浜涙儏鍐典笅 Release 鐗堜细鍑洪敊
链変简涓婇溃镄勪粙缁嶏纴鎴戜滑鍐嶆潵阃愪釜瀵圭収杩欎簺阃夐”鐪嬬湅 Release 鐗堥敊璇鏄镐庢牱浜х敓镄
1. Runtime Library锛氶摼鎺ュ摢绉嶈繍琛屾椂鍒诲嚱鏁板簱阃氩父鍙瀵圭▼搴忕殑镐ц兘浜х敓褰卞搷銆傝皟璇旷増链镄 Runtime Library 鍖呭惈浜呜皟璇曚俊鎭锛屽苟閲囩敤浜嗕竴浜涗缭鎶ゆ満鍒朵互甯锷╁彂鐜伴敊璇锛屽洜姝ゆц兘涓嶅傚彂甯幂増链銆傜紪璇戝櫒鎻愪緵镄 Runtime Library 阃氩父寰堢ǔ瀹氾纴涓崭细阃犳垚 Release 鐗堥敊璇锛涘掓槸鐢变簬 Debug 镄 Runtime Library 锷犲己浜嗗归敊璇镄勬娴嬶纴濡傚爢鍐呭瓨鍒嗛厤锛屾湁镞朵细鍑虹幇 Debug 链夐敊浣 Release 姝e父镄勭幇璞°傚簲褰撴寚鍑虹殑鏄锛屽傛灉 Debug 链夐敊锛屽嵆浣 Release 姝e父锛岀▼搴忚偗瀹氭槸链 Bug 镄勶纴鍙涓嶈繃鍙鑳芥槸 Release 鐗堢殑镆愭¤繍琛屾病链夎〃鐜板嚭𨱒ヨ屽凡銆
2. 浼桦寲锛氲繖鏄阃犳垚阌栾镄勪富瑕佸师锲狅纴锲犱负鍏抽棴浼桦寲镞舵簮绋嫔簭锘烘湰涓婃槸鐩存帴缈昏疟镄勶纴钥屾墦寮浼桦寲钖庣紪璇戝櫒浼氢綔鍑轰竴绯诲垪锅囱俱傝繖绫婚敊璇涓昏佹湁浠ヤ笅鍑犵嶏细
(1) 甯ф寚阍(Frame Pointer)鐪佺暐锛堢亩绉 FPO 锛夛细鍦ㄥ嚱鏁拌皟鐢ㄨ繃绋嬩腑锛屾墍链夎皟鐢ㄤ俊鎭锛堣繑锲炲湴鍧銆佸弬鏁帮级浠ュ强镊锷ㄥ彉閲忛兘鏄鏀惧湪镙堜腑镄勚傝嫢鍑芥暟镄勫0鏄庝笌瀹炵幇涓嶅悓锛埚弬鏁般佽繑锲炲笺佽皟鐢ㄦ柟寮忥级锛屽氨浼氢骇鐢熼敊璇钬斺斺斺斾絾 Debug 鏂瑰纺涓嬶纴镙堢殑璁块梾阃氲繃 EBP 瀵勫瓨鍣ㄤ缭瀛樼殑鍦板潃瀹炵幇锛屽傛灉娌℃湁鍙戠敓鏁扮粍瓒婄晫涔嬬被镄勯敊璇锛堟垨鏄瓒婄晫钬滀笉澶气濓级锛屽嚱鏁伴氩父鑳芥e父镓ц岋绂Release 鏂瑰纺涓嬶纴浼桦寲浼氱渷鐣 EBP 镙埚熀鍧鎸囬拡锛岃繖镙烽氲繃涓涓鍏ㄥ眬鎸囬拡璁块梾镙埚氨浼氶犳垚杩斿洖鍦板潃阌栾鏄绋嫔簭宕╂簝銆侰++ 镄勫己绫诲瀷鐗规ц兘妫镆ュ嚭澶у氭暟杩欐牱镄勯敊璇锛屼絾濡傛灉鐢ㄤ简寮哄埗绫诲瀷杞鎹锛屽氨涓嶈屼简銆备綘鍙浠ュ湪 Release 鐗堟湰涓寮哄埗锷犲叆 /Oy- 缂栬疟阃夐”𨱒ュ叧鎺夊抚鎸囬拡鐪佺暐锛屼互纭瀹氭槸钖︽ょ被阌栾銆傛ょ被阌栾阃氩父链夛细
鈼 MFC 娑堟伅鍝嶅簲鍑芥暟涔﹀啓阌栾銆傛g‘镄勫簲涓
afx_msg LRESULT OnMessageOwn(WPARAM wparam, LPARAM lparam);
ON_MESSAGE 瀹忓寘钖寮哄埗绫诲瀷杞鎹銆傞槻姝㈣繖绉嶉敊璇镄勬柟娉曚箣涓鏄閲嶅畾涔 ON_MESSAGE 瀹忥纴鎶娄笅鍒椾唬镰佸姞鍒 stdafx.h 涓锛埚湪#include "afxwin.h"涔嫔悗锛,鍑芥暟铡熷舰阌栾镞剁紪璇戜细鎶ラ敊
#undef ON_MESSAGE
#define ON_MESSAGE(message, memberFxn) { message, 0, 0, 0, AfxSig_lwl, (AFX_PMSG)(AFX_PMSGW)(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > (&memberFxn) },
(2) volatile 鍨嫔彉閲忥细volatile 锻婅瘔缂栬疟鍣ㄨュ彉閲忓彲鑳借绋嫔簭涔嫔栫殑链鐭ユ柟寮忎慨鏀癸纸濡傜郴缁熴佸叾浠栬繘绋嫔拰绾跨▼锛夈备紭鍖栫▼搴忎负浜嗕娇绋嫔簭镐ц兘鎻愰珮锛屽父鎶娄竴浜涘彉閲忔斁鍦ㄥ瘎瀛桦櫒涓锛堢被浼间簬 register 鍏抽敭瀛楋级锛岃屽叾浠栬繘绋嫔彧鑳藉硅ュ彉閲忔墍鍦ㄧ殑鍐呭瓨杩涜屼慨鏀癸纴钥屽瘎瀛桦櫒涓镄勫兼病鍙樸傚傛灉浣犵殑绋嫔簭鏄澶氱嚎绋嬬殑锛屾垨钥呬綘鍙戠幇镆愪釜鍙橀噺镄勫间笌棰勬湡镄勪笉绗﹁屼綘纭淇″凡姝g‘镄勮剧疆浜嗭纴鍒椤緢鍙鑳介亣鍒拌繖镙风殑闂棰樸傝繖绉嶉敊璇链夋椂浼氲〃鐜颁负绋嫔簭鍦ㄦ渶蹇浼桦寲鍑洪敊钥屾渶灏忎紭鍖栨e父銆傛妸浣犺や负鍙鐤戠殑鍙橀噺锷犱笂 volatile 璇曡瘯銆
(3) 鍙橀噺浼桦寲锛氢紭鍖栫▼搴忎细镙规嵁鍙橀噺镄勪娇鐢ㄦ儏鍐典紭鍖栧彉閲忋备緥濡傦纴鍑芥暟涓链変竴涓链琚浣跨敤镄勫彉閲忥纴鍦 Debug 鐗堜腑瀹冩湁鍙鑳芥帺鐩栦竴涓鏁扮粍瓒婄晫锛岃屽湪 Release 鐗堜腑锛岃繖涓鍙橀噺寰埚彲鑳借浼桦寲璋冿纴姝ゆ椂鏁扮粍瓒婄晫浼氱牬鍧忔爤涓链夌敤镄勬暟鎹銆傚綋铹讹纴瀹为檯镄勬儏鍐典细姣旇繖澶嶆潅寰楀氥备笌姝ゆ湁鍏崇殑阌栾链夛细
鈼 闱炴硶璁块梾锛屽寘𨰾鏁扮粍瓒婄晫銆佹寚阍堥敊璇绛夈备緥濡
void fn(void)
{
int i;
i = 1;
int a[4];
{
int j;
j = 1;
}
a[-1] = 1;//褰撶劧阌栾涓崭细杩欎箞鏄庢樉锛屼緥濡备笅镙囨槸鍙橀噺
a[4] = 1;
}
j 铏界劧鍦ㄦ暟缁勮秺鐣屾椂宸插嚭浜嗕綔鐢ㄥ烟锛屼絾鍏剁┖闂村苟链鏀跺洖锛屽洜钥 i 鍜 j 灏变细鎺╃洊瓒婄晫銆傝 Release 鐗堢敱浜 i銆乯 骞舵湭鍏跺緢澶т綔鐢ㄥ彲鑳戒细琚浼桦寲鎺夛纴浠庤屼娇镙堣镰村潖銆
3. _DEBUG 涓 NDEBUG 锛氩綋瀹氢箟浜 _DEBUG 镞讹纴assert() 鍑芥暟浼氲缂栬疟锛岃 NDEBUG 镞朵笉琚缂栬疟銆傞櫎姝や箣澶栵纴VC++涓杩樻湁涓绯诲垪鏂瑷瀹忋傝繖鍖呮嫭锛
ANSI C 鏂瑷 void assert(int expression );
C Runtime Lib 鏂瑷 _ASSERT( booleanExpression );
_ASSERTE( booleanExpression );
MFC 鏂瑷 ASSERT( booleanExpression );
VERIFY( booleanExpression );
ASSERT_VALID( pObject );
ASSERT_KINDOF( classname, pobject );
ATL 鏂瑷 ATLASSERT( booleanExpression );
姝ゅ栵纴TRACE() 瀹忕殑缂栬疟涔熷弹 _DEBUG 鎺у埗銆
镓链夎繖浜涙柇瑷閮藉彧鍦 Debug鐗堜腑镓嶈缂栬疟锛岃屽湪 Release 鐗堜腑琚蹇界暐銆傚敮涓镄勪緥澶栨槸 VERIFY() 銆备簨瀹炰笂锛岃繖浜涘畯閮芥槸璋幂敤浜 assert() 鍑芥暟锛屽彧涓嶈繃闄勫姞浜嗕竴浜涗笌搴撴湁鍏崇殑璋冭瘯浠g爜銆傚傛灉浣犲湪杩欎簺瀹忎腑锷犲叆浜嗕换浣旷▼搴忎唬镰侊纴钥屼笉鍙鏄甯冨皵琛ㄨ揪寮忥纸渚嫔傝祴鍊笺佽兘鏀瑰彉鍙橀噺鍊肩殑鍑芥暟璋幂敤 绛夛级锛岄偅涔 Release 鐗堥兘涓崭细镓ц岃繖浜涙搷浣滐纴浠庤岄犳垚阌栾銆傚埯瀛﹁呭緢瀹规槗鐘杩欑被阌栾锛屾煡镓剧殑鏂规硶涔熷緢绠鍗曪纴锲犱负杩欎簺瀹忛兘宸插湪涓婇溃鍒楀嚭锛屽彧瑕佸埄鐢 VC++ 镄 Find in Files 锷熻兘鍦ㄥ伐绋嬫墍链夋枃浠朵腑镓惧埌鐢ㄨ繖浜涘畯镄勫湴鏂瑰啀涓涓妫镆ュ嵆鍙銆傚彟澶栵纴链変簺楂樻坠鍙鑳借缮浼氩姞鍏 #ifdef _DEBUG 涔嬬被镄勬浔浠剁紪璇戯纴涔熻佹敞镒忎竴涓嬨
椤轰究鍊煎缑涓鎻愮殑鏄 VERIFY() 瀹忥纴杩欎釜瀹忓厑璁镐綘灏嗙▼搴忎唬镰佹斁鍦ㄥ竷灏旇〃杈惧纺閲屻傝繖涓瀹忛氩父鐢ㄦ潵妫镆 Windows API 镄勮繑锲炲笺傛湁浜涗汉鍙鑳戒负杩欎釜铡熷洜钥屾互鐢 VERIFY() 锛屼簨瀹炰笂杩欐槸鍗遍橹镄勶纴锲犱负 VERIFY() 杩濆弽浜嗘柇瑷镄勬濇兂锛屼笉鑳戒娇绋嫔簭浠g爜鍜岃皟璇曚唬镰佸畬鍏ㄥ垎绂伙纴链缁埚彲鑳戒细甯︽潵寰埚氶夯鐑︺傚洜姝わ纴涓揿朵滑寤鸿灏介噺灏戠敤杩欎釜瀹忋
4. /GZ 阃夐”锛氲繖涓阃夐”浼氩仛浠ヤ笅杩欎簺浜
(1) 鍒濆嫔寲鍐呭瓨鍜屽彉閲忋傚寘𨰾鐢 0xCC 鍒濆嫔寲镓链夎嚜锷ㄥ彉閲忥纴0xCD ( Cleared Data ) 鍒濆嫔寲鍫嗕腑鍒嗛厤镄勫唴瀛桡纸鍗冲姩镐佸垎閰岖殑鍐呭瓨锛屼緥濡 new 锛夛纴0xDD ( Dead Data ) 濉鍏呭凡琚閲婃斁镄勫爢鍐呭瓨锛堜緥濡 delete 锛夛纴0xFD( deFencde Data ) 鍒濆嫔寲鍙椾缭鎶ょ殑鍐呭瓨锛坉ebug 鐗埚湪锷ㄦ佸垎閰嶅唴瀛樼殑鍓嶅悗锷犲叆淇濇姢鍐呭瓨浠ラ槻姝㈣秺鐣岃块梾锛夛纴鍏朵腑𨰾鍙蜂腑镄勮瘝鏄寰杞寤鸿镄勫姪璁拌瘝銆傝繖镙峰仛镄勫ソ澶勬槸杩欎簺鍊奸兘寰埚ぇ锛屼綔涓烘寚阍堟槸涓嶅彲鑳界殑锛堣屼笖 32 浣岖郴缁熶腑鎸囬拡寰埚皯鏄濂囨暟鍊硷纴鍦ㄦ湁浜涚郴缁熶腑濂囨暟镄勬寚阍堜细浜х敓杩愯屾椂阌栾锛夛纴浣滀负鏁板间篃寰埚皯阆囧埌锛岃屼笖杩欎簺鍊间篃寰埚规槗杈ㄨわ纴锲犳よ繖寰堟湁鍒╀簬鍦 Debug 鐗堜腑鍙戠幇 Release 鐗堟墠浼氶亣鍒扮殑阌栾銆傝佺壒鍒娉ㄦ剰镄勬槸锛屽緢澶氢汉璁や负缂栬疟鍣ㄤ细鐢 0 𨱒ュ埯濮嫔寲鍙橀噺锛岃繖鏄阌栾镄勶纸钥屼笖杩欐牱寰堜笉鍒╀簬镆ユ垒阌栾锛夈
(2) 阃氲繃鍑芥暟鎸囬拡璋幂敤鍑芥暟镞讹纴浼氶氲繃妫镆ユ爤鎸囬拡楠岃瘉鍑芥暟璋幂敤镄勫尮閰嶆с傦纸阒叉㈠师褰涓嶅尮閰嶏级
(3) 鍑芥暟杩斿洖鍓嶆镆ユ爤鎸囬拡锛岀‘璁ゆ湭琚淇鏀广傦纸阒叉㈣秺鐣岃块梾鍜屽师褰涓嶅尮閰嶏纴涓庣浜岄”钖埚湪涓璧峰彲澶ц嚧妯℃嫙甯ф寚阍堢渷鐣 FPO 锛
阃氩父 /GZ 阃夐”浼氶犳垚 Debug 鐗埚嚭阌栾 Release 鐗堟e父镄勭幇璞★纴锲犱负 Release 鐗堜腑链鍒濆嫔寲镄勫彉閲忔槸闅忔満镄勶纴杩欐湁鍙鑳戒娇鎸囬拡鎸囧悜涓涓链夋晥鍦板潃钥屾帺鐩栦简闱炴硶璁块梾銆
闄ゆや箣澶栵纴/Gm /GF 绛夐夐”阃犳垚阌栾镄勬儏鍐垫瘆杈冨皯锛岃屼笖浠栦滑镄勬晥鏋沧樉钥屾槗瑙侊纴姣旇缉瀹规槗鍙戠幇銆
涓夈佹庢牱钬滆皟璇曗 Release 鐗堢殑绋嫔簭
阆囧埌 Debug 鎴愬姛浣 Release 澶辫触锛屾樉铹舵槸涓浠跺緢娌涓х殑浜嬶纴钥屼笖寰寰镞犱粠涓嬫坠銆傚傛灉浣犵湅浜嗕互涓婄殑鍒嗘瀽锛岀粨钖堥敊璇镄勫叿浣撹〃鐜帮纴寰埚揩镓惧嚭浜嗛敊璇锛屽浐铹跺緢濂姐备絾濡傛灉涓镞舵垒涓嶅嚭锛屼互涓嬬粰鍑轰简涓浜涘湪杩欑嶆儏鍐典笅镄勭瓥鐣ャ
1. 鍓嶉溃宸茬粡鎻愯繃锛娈ebug 鍜 Release 鍙鏄涓缁勭紪璇戦夐”镄勫樊鍒锛屽疄闄呬笂骞舵病链変粈涔埚畾涔夎兘鍖哄垎浜岃呫傛垜浠鍙浠ヤ慨鏀 Release 鐗堢殑缂栬疟阃夐”𨱒ョ缉灏忛敊璇锣冨洿銆傚备笂镓杩帮纴鍙浠ユ妸 Release 镄勯夐”阃愪釜鏀逛负涓庝箣鐩稿圭殑 Debug 阃夐”锛屽 /MD 鏀逛负 /MDd銆/O1 鏀逛负 /Od锛屾垨杩愯屾椂闂翠紭鍖栨敼涓虹▼搴忓ぇ灏忎紭鍖栥傛敞镒忥纴涓娆″彧鏀逛竴涓阃夐”锛岀湅鏀瑰摢涓阃夐”镞堕敊璇娑埚け锛屽啀瀵瑰簲璇ラ夐”鐩稿叧镄勯敊璇锛岄拡瀵规у湴镆ユ垒銆傝繖浜涢夐”鍦 Project\Settings... 涓閮藉彲浠ョ洿鎺ラ氲繃鍒楄〃阃夊彇锛岄氩父涓嶈佹坠锷ㄤ慨鏀广傜敱浜庝互涓婄殑鍒嗘瀽宸茬浉褰揿叏闱锛岃繖涓鏂规硶鏄链链夋晥镄勚
2. 鍦ㄧ紪绋嬭繃绋嬩腑灏辫佹椂甯告敞镒忔祴璇 Release 鐗堟湰锛屼互鍏嶆渶钖庝唬镰佸お澶氾纴镞堕棿鍙埚緢绱с
3. 鍦 Debug 鐗堜腑浣跨敤 /W4 璀﹀憡绾у埆锛岃繖镙峰彲浠ヤ粠缂栬疟鍣ㄨ幏寰楁渶澶ч檺搴︾殑阌栾淇℃伅锛屾瘆濡 if( i =0 )灏变细寮曡捣 /W4 璀﹀憡銆备笉瑕佸拷鐣ヨ繖浜涜﹀憡锛岄氩父杩欐槸浣犵▼搴忎腑镄 Bug 寮曡捣镄勚备絾链夋椂 /W4 浼氩甫𨱒ュ緢澶氩啑浣欎俊鎭锛屽 链浣跨敤镄勫嚱鏁板弬鏁 璀﹀憡锛岃屽緢澶氭秷鎭澶勭悊鍑芥暟閮戒细蹇界暐镆愪簺鍙傛暟銆傛垜浠鍙浠ョ敤
#progma warning(disable: 4702) //绂佹
//...
#progma warning(default: 4702) //閲嶆柊鍏佽
𨱒ユ殏镞剁佹㈡煇涓璀﹀憡锛屾垨浣跨敤
#progma warning(push, 3) //璁剧疆璀﹀憡绾у埆涓 /W3
//...
#progma warning(pop) //閲嶈句负 /W4
𨱒ユ殏镞舵敼鍙樿﹀憡绾у埆锛屾湁镞朵綘鍙浠ュ彧鍦ㄨや负鍙鐤戠殑闾d竴閮ㄥ垎浠g爜浣跨敤 /W4銆
4.浣犱篃鍙浠ュ儚 Debug 涓镙疯皟璇曚綘镄 Release 鐗堬纴鍙瑕佸姞鍏ヨ皟璇旷﹀彿銆傚湪 Project/Settings... 涓锛岄変腑 Settings for "Win32 Release"锛岄変腑 C/C++ 镙囩撅纴Category 阃 General锛娈ebug Info 阃 Program Database銆傚啀鍦 Link 镙囩 Project options 链钖庡姞涓 "/OPT:REF" (寮曞彿涓嶈佽緭)銆傝繖镙疯皟璇曞櫒灏辫兘浣跨敤 pdb 鏂囦欢涓镄勮皟璇旷﹀彿銆备絾璋冭瘯镞朵綘浼氩彂鐜版柇镣瑰緢闅捐剧疆锛屽彉閲忎篃寰堥毦镓惧埌钬斺旇繖浜涢兘琚浼桦寲杩囦简銆备笉杩囦护浜哄简骞哥殑鏄锛孋all Stack 绐楀彛浠岖劧宸ヤ綔姝e父锛屽嵆浣垮抚鎸囬拡琚浼桦寲锛屾爤淇℃伅锛堢壒鍒鏄杩斿洖鍦板潃锛変粛铹惰兘镓惧埌銆傝繖瀵瑰畾浣嶉敊璇寰堟湁甯锷┿