共用方式為


判斷提示

這個主題適用於:

版本

Visual Basic

C#

F#

C++

Web Developer

Express

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

僅適用原生

標題不適用於

Pro、Premium 和 Ultimate

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

僅適用原生

標題不適用於

判斷提示 (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 程式碼中的判斷提示

概念

偵錯工具安全性

其他資源

偵錯機器碼