C 執行階段程式庫使用這些函式處理傳遞至 CRT 程式庫函式的無效參數。 您的程式碼也可以使用這些函式,以支援預設或自訂處理無效參數。
語法
extern "C" void __cdecl
_invalid_parameter(
wchar_t const* const expression,
wchar_t const* const function_name,
wchar_t const* const file_name,
unsigned int const line_number,
uintptr_t const reserved);
extern "C" void __cdecl
_invalid_parameter_noinfo(void);
extern "C" __declspec(noreturn) void __cdecl
_invalid_parameter_noinfo_noreturn(void);
extern "C" __declspec(noreturn) void __cdecl
_invoke_watson(
wchar_t const* const expression,
wchar_t const* const function_name,
wchar_t const* const file_name,
unsigned int const line_number,
uintptr_t const reserved);
參數
expression
字串,表示無效的原始程式碼參數表達式。
function_name
呼叫此處理常式的函式名稱。
file_name
呼叫處理常式的原始程式碼檔。
line_number
呼叫處理常式的原始程式碼行號。
reserved
未使用的。
傳回值
這些函式不會傳回值。 和 _invoke_watson 函_invalid_parameter_noinfo_noreturn式不會傳回給呼叫端,在某些情況下,_invalid_parameter而且_invalid_parameter_noinfo可能不會傳回給呼叫端。
備註
當無效參數傳遞至 C 執行階段程式庫函式時,程式庫函式會呼叫「無效的參數處理常式」,此函式可由程式設計師指定其可以做的事情。 例如,它可以將問題回報給使用者、寫入記錄檔、開啟偵錯工具、終止程式,或不執行任何動作。 如果程式設計師沒有指定任何功能,則會呼叫預設處理常式 _invoke_watson。
根據預設,當偵錯程式碼識別出無效參數時,CRT 程式庫函式會使用 verbose 參數呼叫 _invalid_parameter 函式。 在非偵錯程式碼中,會呼叫 _invalid_parameter_noinfo 函式,其會呼叫使用空白參數的 _invalid_parameter 函式。 如果非偵錯 CRT 程式庫函式需要終止程式,會呼叫 _invalid_parameter_noinfo_noreturn 函式,其會呼叫使用空白參數的 _invalid_parameter 函式,並接著呼叫 _invoke_watson 函式以強制終止程式。
_invalid_parameter 函式檢查是否已設定使用者定義的無效的參數處理常式,且如果已設定,則呼叫它。 例如,如果使用者定義線程區域處理程式是由目前線程中的呼叫 set_thread_local_invalid_parameter_handler 所設定,則會呼叫它,然後函式會傳回 。 否則,如果使用者定義全域無效的參數處理程式是由呼叫 set_invalid_parameter_handler所設定,則會呼叫它,則函式會傳回 。 否則,呼叫預設的處理常式 _invoke_watson。 _invoke_watson 的預設行為是終止程式。 使用者定義的處理常式可能會終止或傳回。 我們建議您,除非確定可復原,否則使用者定義的處理常式應終止程式。
呼叫默認處理程式時,如果處理器支援__fastfail作業,則會使用 的 FAST_FAIL_INVALID_ARG 參數叫用該處理程式_invoke_watson,而且進程會終止。 否則,就會引發快速失敗例外狀況,這可以附加的偵錯工具來攔截。 如果允許進程繼續,則會使用的例外狀況代碼狀態STATUS_INVALID_CRUNTIME_PARAMETER來終止對 Windows TerminateProcess 函式的呼叫。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
需求
| 函式 | 必要的標頭 |
|---|---|
_invalid_parameter、 、 _invalid_parameter_noinfo、 _invalid_parameter_noinfo_noreturn_invoke_watson |
<corecrt.h> |
如需相容性詳細資訊,請參閱相容性。
另請參閱
依字母順序排列的函式參考
_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler
參數驗證