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();
}

posted @ 2015-02-28 17:06  邵学军  阅读(324)  评论(0编辑  收藏  举报