Поделиться через


_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson

Эти функции используются библиотекой времени выполнения 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
Не используется.

Возвращаемое значение

Эти функции не возвращают значение. Вызывающий _invalid_parameter_noinfo_noreturn объект не возвращается и _invoke_watson в некоторых случаях _invalid_parameter_invalid_parameter_noinfo функции не возвращаются в вызывающий объект.

Замечания

Если функциям библиотеки времени выполнения C передаются недопустимые параметры, они вызывают обработчик недопустимого параметра. Он представляет собой функцию, в которой программист задает выполнение определенных действий. Например, обработчик может сообщить о проблеме пользователю, записать данные в журнал, установить прерывание в отладчике, завершить работу программы или не выполнять никаких действий. Если программист не указал никакую функцию, по умолчанию вызывается обработчик _invoke_watson.

Если в коде отладки обнаруживается недопустимый параметр, функции библиотеки CRT по умолчанию вызывают функцию _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 завершает работу программы. Определенные пользователем обработчики могут завершать работу программы или выполнять возврат. В тех случаях, когда восстановление работоспособности программы не гарантировано, рекомендуется завершать ее.

При вызове обработчика _invoke_watson по умолчанию, если обработчик поддерживает __fastfail операцию, он вызывается с помощью параметра FAST_FAIL_INVALID_ARG и завершается процесс. В противном случае возникает исключение с быстрым прекращением, которое может быть перехвачено с помощью связанного отладчика. Если процесс разрешен, он завершается вызовом функции Windows TerminateProcess с помощью состояния STATUS_INVALID_CRUNTIME_PARAMETERкода исключения.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в 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
Проверка параметров