锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
瀛︿範(fàn)涓涓嬫柇璦鍚э細(xì)
·······浠涔堟槸鏂█
鍦ㄦ煇澶勫垽鏂煇涓涓〃杈懼紡鐨勫間負(fù)鐪熸垨鑰呭亣錛屽鏋滃亣鍒欒緭鍑洪敊璇秷鎭茍鍋滄紼嬪簭鐨勬墽琛寏
assert鏄畯錛岃屼笉鏄嚱鏁幫紝鍙湪debug鐗堟湰涓湁鏁堬紝鍥犳鏃犻渶鍦╮elease鐗堟湰鍒犻櫎銆?/font>
·······鍝嚑縐嶆柇璦
MFC
ASSERT
void foo(char* p,int size)
{
ASSERT(p != 0); // 楠岃瘉緙撳啿鍖烘寚閽?br>ASSERT((size >= 100); // 紜緙撳啿鍖哄ぇ灝忚嚦灝戜負(fù)100瀛楄妭
// foo 鍑芥暟鐨勫叾瀹冭綆楄繃紼?br>}
濡傛灉娌℃湁瀹氫箟_DEBUG棰勫鐞嗙錛屽垯璇ヨ鍙ヤ笉浼?xì)鐪熸鐢熸垚浠g爜銆俈isual C++浼?xì)鍦ㄨ皟璇曟ā寮従~栬瘧鏃惰嚜鍔ㄥ畾涔塤DEBUG錛岃屽湪鍙戣妯″紡涓嬶紝璇ラ澶勭悊絎︽槸涓嶅瓨鍦ㄧ殑銆傚鏋滃畾涔変簡(jiǎn)_DEBUG錛屽垯涓婅堪涓や釜鏂█鐢熸垚鐨勪唬鐮佺被濡傦細(xì)
//ASSERT(p != 0);
do
{
if(!(p != 0) && AfxAssertFailedLine(__FILE__, __LINE__))
AfxDebugBreak();
} while(0);
//ASSERT((size >= 100);
do
{
if(!(size >= 100) && AfxAssertFailedLine(__FILE__,__LINE__))
AfxDebugBreak();
}while(0);
ASSERT_KINDOF(classname,pObject); ASSERT_KINDOF(CDocument,pDocument);
媯(gè)楠宲Object鎸囧悜鐨勫璞℃槸classname綾葷殑涓涓璞℃垨鑰呭叾媧劇敓綾葷殑瀵硅薄
ASSERT_VALID(pObject); pObject 蹇呴』鏄竴涓淳鐢熶簬CObject綾葷殑綾誨璞★紝浼?xì)璋冪敤鍏堕噸鍐欑殑AssertValid鍑芥暟 錛屼緥濡?/font>
濡傛灉浣跨敤搴旂敤鍚戝鎴栫被鍚戝鐢熸垚鍩轟簬MFC鐨勭被錛岄氬父浼?xì)寰楀埌AssertValid()鐨勯鏋訛紝鏈濂芥敼鍐欒繖浜涢鏋朵唬鐮佷互澧炲姞鏈鍩烘湰鐨勫畬鏁存ф鏌ャ備笅闈㈡槸涓涓吀鍨嬬殑渚嬪瓙錛岀被Sample浠嶤Object緇ф壙錛屽亣瀹氬畠鍚湁鑱屽憳鍚嶅瓧鍙?qiáng)鍏惰柂姘村Q?
class Sample : public CObject
{
protected:
CString m_Name; // 鑱屽憳鍚嶅瓧
double m_Salary; // 钖按
public:
Sample(LPCTSTR name,double salary) : m_Name(name), m_Salary(salary) {}
#ifdef _DEBUG
virtual void AssertValid() const;
#endif
};
#ifdef _DEBUG
void Sample::AssertValid() const
{
CObject::AssertValid(); // 楠岃瘉鍩虹被
ASSERT(!m_Name.IsEmpty()); // 楠岃瘉鑱屽憳鍚嶅瓧
ASSERT(m_Salary > 0); // 楠岃瘉钖按
}
#endif
CRT assertion
_ASSERT 鍜?nbsp; _ASSERTE 鍚庝竴涓細(xì)鍦ㄥ嚭閿欐椂鍚屾椂鎵撳嵃鍑烘潯浠跺垽鏂彞
ANSI
assert()
娉ㄦ剰錛歛ssert鐢ㄤ簬媯(gè)嫻嬮潪娉曠殑杈撳叆錛屼絾鏄悎娉曠殑杈撳叆騫朵笉涓瀹氭槸姝g‘鐨勶紝渚嬪錛?/font>
int pB = (int*)malloc(sizeof(int)*1000);
assert(pB!=NULL) //閿欒鐨勪嬌鐢╝ssert 浠栦細(xì)鍦╮elease鐗堟湰澶辨晥~涔熷氨鏄assert涓嶅簲璇ュ紼嬪簭浜х敓鍓綔鐢?/font>
姝g‘鐨勫仛娉曪細(xì)
int pB = (int*) malloc(sizeof(int)*1000);
if(pB == NULL)
{
//閿欒澶勭悊
}
else{
}
鍙︿竴涓緥瀛愶細(xì)
void draw(){
CFigure* pF = getCF();
assert(pf!=NULL);
if(pf == NULL){}
else{
}
}
姝ゅ錛屽浜巊etCF鏉ヨ榪斿洖鍊間負(fù)NULL鏄潪娉曠殑錛屽鏋滀粬鐨勮繑鍥炲煎彲鑳戒負(fù)null灝辨病蹇呰鍔犱笂assert璇彞銆?/font>
鑰屼笅闈㈢殑if璇彞鍒欐槸涓轟簡(jiǎn)闃叉release鐗堟湰鍑虹幇null鎸囬拡鐨勬儏鍐點(diǎn)?
VERIFY()
鐢變簬ASSERT浠呭湪紼嬪簭鐨勮皟璇曠増璧蜂綔鐢紝嫻嬭瘯琛ㄨ揪寮忔繪槸琚姩鐨勩備篃灝辨槸璇達(dá)紝瀹冧滑涓嶈兘鍖呭惈璧嬪箋佸閲忋佸噺閲忕瓑鐪熸鏀瑰彉鏁版嵁鐨勬搷浣溿備絾鏈夋椂鍊欐垜浠渶瑕侀獙璇佷竴涓富鍔ㄨ〃杈懼紡錛屾瘮濡傝祴鍊艱鍙ャ傝繖鏃跺彲浠ヤ嬌鐢╒ERIFY浠f浛ASSERT銆備笅闈㈡槸涓涓緥瀛愶細(xì)
void foo(char* p,int size)
{
char* q; // 鎸囬拡鐨勫壇鏈?br>VERIFY(q = p); // 鎷瘋礉鎸囬拡騫舵墽琛岄獙璇?br>ASSERT((size >= 100); // 紜繚緙撳啿鍖哄ぇ灝忚嚦灝戜負(fù)100瀛楄妭
// 鎵ц foo 鐨勫叾瀹冩搷浣?br>}
鍦ㄨ皟璇曟ā寮忎笅ASSERT鍜孷ERIFY鏄浉鍚岀殑銆備絾鍦╮elease妯″紡涓嬶紝VERIFY鑳藉緇х畫(huà)瀵硅〃杈懼紡姹傚鹼紙浣嗕笉鍐嶈繘琛屾柇璦媯(gè)楠岋級(jí)錛岃孉SSERT璇彞鍦ㄦ晥鏋滀笂灝卞鍚屽凡緇忓垹闄や簡(jiǎn)涓鏍楓?
灝界鍦∕FC婧愪唬鐮佷腑鍙互鎵懼埌涓浜涘簲鐢╒ERIFY鐨勪緥瀛愶紝浣咥SSERT鐢ㄥ緱鏇翠負(fù)鏅亶銆備竴浜涚▼搴忓憳鎬繪槸瀹屽叏閬垮厤浣跨敤VERIFY錛屽洜涓轟粬浠凡緇忎範(fàn)鎯簬浣跨敤琚姩鏂█銆傝璁頒綇錛屽鏋滃湪ASSERT璇彞涓嬌鐢ㄤ簡(jiǎn)涓誨姩琛ㄨ揪寮忥紝緙栬瘧鍣ㄤ笉浼?xì)鍙戝囖Z換浣曡鍛娿傚湪鍙戣妯″紡涓嬬紪璇戞椂璇ヨ〃杈懼紡浼?xì)琚洿鎺ュ垹闄ゅQ屼粠鑰屽鑷寸▼搴忚繍琛岀殑閿欒銆傜敱浜庡彂琛岀増紼嬪簭涓嶅惈璋冭瘯淇℃伅錛岃繖縐嶇被鍨嬬殑閿欒鏄緢闅炬壘鍒板師鍥犵殑銆?