C Run-Time(CRT) Library参数异常处理
在VC项目中使用C Run-Time函数时,如果参数异常,比如“strcpy_s”的strSource的字符数大于strDestination的大小,将引发参数异常,在Debug下是断言失败,Release下Run Time Error,尤其是在我们发布程序后,这种错误无法提供有效的信息定位错误,导致在客户面前很狼狈,如何友好的显示呢?其实我们可以简单的设置自己的参数异常处理函数,友好的显示错误信息,记录错误函数所在的源码文件、函数和行号,这样有助于我们调试程序。
设置方法:
调用“_set_invalid_parameter_handler”设置参数异常处理函数:
_invalid_parameter_handler newHandler = MyInvalidParameterHandler;
_set_invalid_parameter_handler(newHandler);// 设置回调函数
_CrtSetReportMode(_CRT_ASSERT, 0);// 关闭断言提示
回调函数的定义:
void MyInvalidParameterHandler(const wchar_t* expression,
const wchar_t* function,
const wchar_t* file,
unsigned int line,
uintptr_t pReserved)
{
wprintf(L"Invalid parameter detected in function %s."
L" File: %s Line: %d\n", function, file, line);
wprintf(L"Expression: %s\n", expression);
abort();
}