判斷提示

更新:2007 年 11 月

這個主題適用於:

版本

Visual Basic

C#

C++

Web Developer

Express 版

標題不適用於 標題不適用於

僅適用原生

標題不適用於

Standard 版

標題不適用於 標題不適用於

僅適用原生

標題不適用於

Pro/Team 版

標題不適用於 標題不適用於

僅適用原生

標題不適用於

表格圖例:

標題適用於

套用

標題不適用於

不套用

預設會套用主題但隱藏命令

預設隱藏的命令。

判斷提示 (Assertion) 陳述式會指定您希望在程式的某個特定點維持為 true 的條件。如果該條件並未維持 True,表示判斷提示失敗,程式執行將會中斷,並出現判斷提示已失敗對話方塊

Visual C++ 根據下列建構支援判斷提示陳述式:

您可以使用下列判斷提示:

MFC 和 C 執行階段程式庫判斷提示

當偵錯工具因為 MFC 或 C 執行階段程式庫判斷提示而中止時,它會巡覽到原始程式檔裡發生判斷提示的地方 (如果有原始碼)。判斷提示訊息會出現在輸出視窗以及 [判斷提示已失敗] 對話方塊裡。如果您要儲存判斷提示訊息以供未來參考,您可以從 [輸出] 視窗複製這段內容至文字視窗。[輸出] 視窗也可能包含其他的錯誤訊息。請仔細地檢查這些訊息,因為它們提供了造成判斷提示失敗的線索。

您可以透過在程式碼裡自由地使用判斷提示,捕捉許多開發期間的錯誤。為您所做的每個假設撰寫判斷提示是良好的規則。例如,您假設了某個引數不是 NULL,便可使用判斷提示陳述式來檢查這個假設。

_DEBUG

判斷提示陳述式只有在定義了 _DEBUG 時才會編譯。當 _DEBUG 尚未定義時,編譯器會將判斷提示當成 Null 陳述式。因此,判斷提示陳述式不會造成最終發行程式任何負荷量;您可以在不會影響發行版本 (Release Version) 的效能,且無需使用 #ifdef 指示詞的情況下,自由地在程式碼裡使用它們。

使用判斷提示的副作用

在程式碼加入判斷提示時,請確定判斷提示不會有副作用。例如,請考慮下列判斷提示:

ASSERT(nM++ > 0); // Don't do this!

因為 ASSERT 運算式不會在程式的發行版本裡評估,所以 nM 在偵錯版本和發行版本中會有不同的值。在 MFC 裡,您可以使用 VERIFY 巨集取代 ASSERTVERIFY 會評估運算式,但不會檢查發行版本的結果。

請特別小心在判斷提示陳述式裡使用函式呼叫 (Function Call),因為評估函式可能會有意料之外的影響。

ASSERT ( myFnctn(0)==1 ) // unsafe if myFnctn has side effects
VERIFY ( myFnctn(0)==1 ) // safe

VERIFY 在偵錯版本和發行版本都會呼叫 myFnctn,因此可以放心使用。然而,發行版本中仍然會產生不必要函式呼叫的負荷量。

請參閱

概念

偵錯工具安全性

參考

Managed 程式碼中的判斷提示

其他資源

偵錯機器碼