2 回答

TA贡献1757条经验 获得超7个赞
程序运行过程中产生的异常一般是由程序自身处理
程序自身不处理 且调试器也不处理的
操作系统将调用默认的全局异常处理函数来处理异常
这个全局函数是可以更改的
更改办法是调用函数:SetUnhandledExceptionFilter

TA贡献1794条经验 获得超8个赞
这个里面涉及的问题可能比较多?
如果你使用SEH(结构化异常处理)那么你可以捕获绝大多数的异常,但是在结构化异常处理是不能和确定性资源清理一起使用的使用的,简单的说你不能像这样去定义一个对象
A a;
使用关键字
__try
__except
__finally
你可能需要下面两个函数
GetExceptionCode
GetExceptionInformation
这是2个例子
DWORD FilterFunction()
{
printf("1 "); // printed first
return EXCEPTION_EXECUTE_HANDLER;
}
VOID main(VOID)
{
__try
{
__try
{
RaiseException(1, // exception code
0, // continuable exception
0, NULL); // no arguments
}
__finally
{
printf("2 "); // this is printed second
}
}
__except ( FilterFunction() )
{
printf("3\n"); // this is printed last
}
}
BOOL SafeDiv(INT32 dividend, INT32 divisor, INT32 *pResult)
{
__try
{
*pResult = dividend / divisor;
}
__except(GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
return FALSE;
}
return TRUE;
}
最后再提醒你,__try只能和__except或者(注意这里是“或者”)__finally连用,不能__try{...}__except(){...}__finally{...}这样使用
- 2 回答
- 0 关注
- 116 浏览
添加回答
举报