DEBUG鍜孯ELEASE 鐗堟湰宸紓鍙婅皟璇曠浉鍏抽棶棰橈細
I. 鍐呭瓨鍒嗛厤闂
1. 鍙橀噺鏈垵濮嬪寲銆備笅闈㈢殑紼嬪簭鍦╠ebug涓繍琛岀殑寰堝ソ銆?/font>
thing * search(thing * something)
BOOL found;
for(int i = 0; i < whatever.GetSize(); i++)
{
if(whatever[i]->field == something->field)
{ /* found it */
found = TRUE;
break;
} /* found it */
}
if(found)
return whatever[i];
else
return NULL;
鑰屽湪release涓嵈涓嶈錛屽洜涓篸ebug涓細鑷姩緇欏彉閲忓垵濮嬪寲found=FALSE,鑰屽湪release鐗堜腑鍒欎笉浼氥傛墍浠ュ敖鍙兘鐨勭粰鍙橀噺銆佺被鎴栫粨鏋勫垵濮嬪寲銆?/font>
2. 鏁版嵁婧㈠嚭鐨勯棶棰?nbsp;
濡傦細char buffer[10];
int counter;
lstrcpy(buffer, "abcdefghik");
鍦╠ebug鐗堜腑buffer鐨凬ULL瑕嗙洊浜哻ounter鐨勯珮浣嶏紝浣嗘槸闄ら潪counter>16M,浠涔堥棶棰樹篃娌℃湁銆備絾鏄湪release鐗堜腑錛宑ounter鍙兘琚斁鍦ㄥ瘎瀛樺櫒涓紝榪欐牱NULL灝辮鐩栦簡buffer涓嬮潰鐨勭┖闂達紝鍙兘灝辨槸鍑芥暟鐨勮繑鍥炲湴鍧錛岃繖灝嗗鑷碅CCESS ERROR銆?br /> 3. DEBUG鐗堝拰RELEASE鐗堢殑鍐呭瓨鍒嗛厤鏂瑰紡鏄笉鍚岀殑銆傚鏋滀綘鍦―EBUG鐗堜腑鐢寵 ele 涓?6*sizeof(DWORD)=24bytes,瀹為檯涓婂垎閰嶇粰浣犵殑鏄?2bytes錛坉ebug鐗堜互32bytes涓哄崟浣嶅垎閰嶏級錛岃屽湪release鐗堬紝鍒嗛厤緇欎綘鐨勫氨鏄?4bytes錛坮elease鐗堜互8bytes涓哄崟浣嶏級錛屾墍浠ュ湪debug鐗堜腑濡傛灉浣犲啓ele[6],鍙兘涓嶄細鏈変粈涔堥棶棰橈紝鑰屽湪release鐗堜腑錛屽氨鏈堿CCESS VIOLATE銆?/font>
II. ASSERT鍜孷ERIFY
1. ASSERT鍦≧elease鐗堟湰涓槸涓嶄細琚紪璇戠殑銆?/font>
ASSERT瀹忔槸榪欐牱瀹氫箟鐨?/font>
#ifdef _DEBUG
#define ASSERT(x) if( (x) == 0) report_assert_failure()
#else
#define ASSERT(x)
#endif
瀹為檯涓婂鏉備竴浜涳紝浣嗘棤鍏崇揣瑕併傚亣濡備綘鍦ㄨ繖浜涜鍙ヤ腑鍔犱簡紼嬪簭涓繀欏昏鏈夌殑浠g爜
姣斿
ASSERT(pNewObj = new CMyClass);
pNewObj->MyFunction();
榪欑鏃跺橰elease鐗堟湰涓殑pNewObj涓嶄細鍒嗛厤鍒扮┖闂?/font>
鎵浠ユ墽琛屽埌涓嬩竴涓鍙ョ殑鏃跺欑▼搴忎細鎶ヨ紼嬪簭鎵ц浜嗛潪娉曟搷浣滅殑閿欒銆傝繖鏃跺彲浠ョ敤VERIFY 錛?/font>
#ifdef _DEBUG
#define VERIFY(x) if( (x) == 0) report_assert_failure()
#else
#define VERIFY(x) (x)
#endif
榪欐牱鐨勮瘽錛屼唬鐮佸湪release鐗堜腑灝卞彲浠ユ墽琛屼簡銆?/font>
III. 鍙傛暟闂錛?/font>
鑷畾涔夋秷鎭殑澶勭悊鍑芥暟錛屽繀欏誨畾涔夊涓嬶細
afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);
榪斿洖鍊煎繀欏繪槸HRESULT鍨嬶紝鍚﹀垯Debug浼氳繃錛岃孯elease鍑洪敊
IV. 鍐呭瓨鍒嗛厤
淇濊瘉鏁版嵁鍒涘緩鍜屾竻闄ょ殑緇熶竴鎬э細濡傛灉涓涓狣LL鎻愪緵涓涓兘澶熷垱寤烘暟鎹殑鍑芥暟錛岄偅涔堣繖涓狣LL鍚屾椂搴旇鎻愪緵涓涓嚱鏁伴攢姣佽繖浜涙暟鎹傛暟鎹殑鍒涘緩鍜屾竻闄ゅ簲璇ュ湪鍚屼竴涓眰嬈′笂銆?/font>
V. DLL鐨勭伨闅?/font>
浜轟滑灝嗕笉鍚岀増鏈珼LL娣峰悎閫犳垚鐨勪笉涓鑷存у艦璞$殑縐頒負 “鍔ㄦ佽繛鎺ュ簱鐨勫湴鐙?#8220;(DLL Hell) 錛岀敋鑷沖井杞嚜宸變篃榪欎箞璇?http://msdn.microsoft.com/library/techart/dlldanger1.htm)銆?/font>
濡傛灉浣犵殑紼嬪簭浣跨敤浣犺嚜宸辯殑DLL鏃惰娉ㄦ剰錛?/font>
1. 涓嶈兘灝哾ebug鍜宺elease鐗堢殑DLL娣峰悎鍦ㄤ竴璧蜂嬌鐢ㄣ俤ebug閮芥槸debug鐗堬紝release鐗堥兘鏄痳elease鐗堛?/font>
瑙e喅鍔炴硶鏄皢debug鍜宺elease鐨勭▼搴忓垎鍒斁鍦ㄤ富紼嬪簭鐨刣ebug鍜宺elease鐩綍涓?/font>
2. 鍗冧竾涓嶈浠ヤ負闈欐佽繛鎺ュ簱浼氳В鍐抽棶棰橈紝閭e彧浼氫嬌鎯呭喌鏇寸碂緋曘?/font>
VI. RELEASE鏉夸腑鐨勮皟璇曪細
1. 灝咥SSERT() 鏀逛負 VERIFY() 銆傛壘鍑哄畾涔夊湪"#ifdef _DEBUG"涓殑浠g爜錛屽鏋滃湪RELEASE鐗堟湰涓渶瑕佽繖浜涗唬鐮佽灝嗕粬浠Щ鍒板畾涔夊銆傛煡鎵綯RACE(...)涓唬鐮侊紝鍥犱負榪欎簺浠g爜鍦≧ELEASE涓篃涓嶈緙栬瘧銆傝璁ょ湡媯鏌ラ偅浜涘湪RELEASE涓渶瑕佺殑浠g爜鏄惁騫舵病鏈夎渚垮疁銆?/p>
2. 鍙橀噺鐨勫垵濮嬪寲鎵甯︽潵鐨勪笉鍚岋紝鍦ㄤ笉鍚岀殑緋葷粺錛屾垨鏄湪DEBUG/RELEASE鐗堟湰闂撮兘瀛樺湪榪欐牱鐨勫樊寮傦紝鎵浠ヨ瀵瑰彉閲忚繘琛屽垵濮嬪寲銆?/p>
3. 鏄惁鍦ㄧ紪璇戞椂宸茬粡鏈変簡璀﹀憡?璇峰皢璀﹀憡綰у埆璁劇疆涓?鎴?,鐒跺悗淇濊瘉鍦ㄧ紪璇戞椂娌℃湁璀﹀憡鍑虹幇.
VII. 灝哖roject Settings" 涓?"C++/C " 欏圭洰涓嬩紭鍖栭夐」鏀逛負Disbale錛圖ebug錛夈傜紪璇戝櫒鐨勪紭鍖栧彲鑳藉鑷磋澶氭剰鎯充笉鍒扮殑閿欒錛岃鍙傝僪ttp://www.pgh.net/~newcomer/debug_release.htm
1. 姝ゅ瀵筊ELEASE鐗堟湰鐨勮蔣浠朵篃鍙互榪涜璋冭瘯錛岃鍋氬涓嬫敼鍔細
鍦?Project Settings" 涓?"C++/C " 欏圭洰涓嬭緗?"category" 涓?"General" 騫朵笖灝?Debug Info"璁劇疆涓?"Program Database"銆?/p>
鍦?"Link"欏圭洰涓嬮変腑"Generate Debug Info"媯鏌ユ銆?/p>
"Rebuild All"
濡傛鍋氭硶浼氫駭鐢熺殑涓浜涢檺鍒訛細
鏃犳硶鑾峰緱鍦∕FC DLL涓殑鍙橀噺鐨勫箋?/p>
蹇呴』瀵硅杞歡鎵浣跨敤鐨勬墍鏈塂LL宸ョ▼閮借繘琛屾敼鍔ㄣ?/p>
鍙︼細
MS BUG錛歁S鐨勪竴浠芥妧鏈枃妗d腑琛ㄦ槑錛屽湪VC5涓浜嶥LL鐨?Maximize Speed"浼樺寲閫夐」騫舵湭琚畬鍏ㄦ敮鎸侊紝鍥犳榪欏皢浼氬紩璧峰唴瀛橀敊璇茍瀵艱嚧紼嬪簭宕╂簝銆?/p>
2. www.sysinternals.com鏈変竴涓▼搴廌ebugView錛岀敤鏉ユ崟鎹塐utputDebugString鐨勮緭鍑猴紝榪愯璧鋒潵鍚庯紙浼拌鏄嚜璁句負system debugger錛夊氨鍙互瑙傜湅鎵鏈夌▼搴忕殑OutputDebugString鐨勮緭鍑恒傛鍚庯紝浣犲彲浠ヨ劚紱籚C鏉ヨ繍琛屼綘鐨勭▼搴忓茍瑙傜湅璋冭瘯淇℃伅銆?/p>
3. 鏈変竴涓彨Gimpel Lint鐨勯潤鎬佷唬鐮佹鏌ュ伐鍏鳳紝鎹姣旇緝濂界敤銆俬ttp://www.gimpel.com 涓嶈繃瑕佸寲$鐨勩?/p>
鍙傝冩枃鐚細
1) http://www.cygnus-software.com/papers/release_debugging.html
2) http://www.pgh.net/~newcomer/debug_release.htm