ASSER、VERIFY、TRACE詳解

ASSERT()被測試它的參數,若是參數爲零,則中斷執行並打印一段說明消息。在Release版本的程序中它不起任何做用。c++

ASSERT()使用的時候必須保證參數表達式中不能有函數調用,所以對於任何有函數調用的參數表達式,應該使用宏VERIFY(),以保證表達式中的函數調用在Release版本中會被正確求值。編輯器

斷言(assertion)用斷言信息(程序,模塊,assertion行)的對話框執行,對話框右三個按鈕:"Break ","Re[eat"("Debug"),and "continue"("Ignore"). "Break"結束程序,"continue"忽略斷言,最有用的是"Repeat"按鈕,按下它在斷言的地方開源代碼編輯器。在這裏你能夠測試全部的變量並明白哪裏出了問題。函數

例如:ASSERT(pPointer);ASSERT(n>0 && n<100);ASSERT(0);測試

ASSERT在執行簡單驗證時頗有用,但對於c++對象,特別是用cobject派生的對象,則有更好的方法ASSERT_VALID來實現相似操做。做爲通常規則,咱們應在開始時用每個對象以前檢查數據訛誤,this

ASSERT_VALID(this);ASSERT_VALID(pView);指針

VERIFY()調試

VERIFY ()和ASSERT()很類似,區別在於Release版本中它仍然有效.對象

TRACE()it

TRACE()基本上就是函數printf()的一個複製品,惟一的區別在於它把結果輸出到調試窗口。在Release版本中它是無效的。通常是用TRACE0(),TRACE1()。TRACE2()。。。而不用TRACE()。io

這三個宏在Release版本中都不會產生任何實質性的影響,他們是否起做用取決因而否認義了預訂義了宏/

經常使用用法:

爲了控制傳用指針:

void SomeFun(SomeType* pPointer)

{

       ASSERT(pPointer);

//some instrctions。

}
你能夠在「switch」和「if」操做中捕獲奇怪的值

例如:if(nWaterTemp〉=0 && nWaterTemp<50)

{

     //some instrction

}

else if(nWaterTemp>=50 && nWaterTemp<=100

{

    //some instruction.

}

else {

ASSERT(0);

}

對值得斷言:

ASSERT(nSomeValue>=MinValue and nSomeValue<=MaxValue);

ASSERT(nOtherValue !=0)

相關文章
相關標籤/搜索