为什么小弟我使用SetUnhandledExceptionFilter没有效果啊
为什么我使用SetUnhandledExceptionFilter没有效果啊?
我的代码如下:
static LPTOP_LEVEL_EXCEPTION_FILTER g_topExceptFunc = NULL;
LONG __stdcall myExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
...
WriteLogFile( TEXT( "c:\\log.txt "), str );
if (g_topExceptFunc != NULL) {
return g_topExceptFunc(pExceptionInfo);
}
return EXCEPTION_CONTINUE_SEARCH;
}
BOOL CTestExceptApp::InitInstance()
{
g_topExceptFunc = SetUnhandledExceptionFilter(myExceptionFilter);
...
}
下面是人为制造的一个错误:
char *a = new char[2];
memset( a, 'a ', 2048 );
printf( "%s ", a );
当注释掉 SetUnhandledExceptionFilter 的调用时, 会弹出系统默认的出错的对话框指示内存访问错误, 当不注释时, 该对话框就不弹出了, 而我的函数 myExceptionFilter 也没有被执行, 这是为什么呢? 我用vc2005新增一个工程, 把相同的代码移过去, 则是有效的, myExceptionFilter会被调用。
所以想请教高手,有什么因素会导致 SetUnhandledExceptionFilter 无效呢?
另外,我的程序原来是 vc6.0 的工程, 后来使用 vc2005 编译的,不知和这个有没有关系?
------解决方案--------------------
http://support.microsoft.com/kb/173652
我的代码如下:
static LPTOP_LEVEL_EXCEPTION_FILTER g_topExceptFunc = NULL;
LONG __stdcall myExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
...
WriteLogFile( TEXT( "c:\\log.txt "), str );
if (g_topExceptFunc != NULL) {
return g_topExceptFunc(pExceptionInfo);
}
return EXCEPTION_CONTINUE_SEARCH;
}
BOOL CTestExceptApp::InitInstance()
{
g_topExceptFunc = SetUnhandledExceptionFilter(myExceptionFilter);
...
}
下面是人为制造的一个错误:
char *a = new char[2];
memset( a, 'a ', 2048 );
printf( "%s ", a );
当注释掉 SetUnhandledExceptionFilter 的调用时, 会弹出系统默认的出错的对话框指示内存访问错误, 当不注释时, 该对话框就不弹出了, 而我的函数 myExceptionFilter 也没有被执行, 这是为什么呢? 我用vc2005新增一个工程, 把相同的代码移过去, 则是有效的, myExceptionFilter会被调用。
所以想请教高手,有什么因素会导致 SetUnhandledExceptionFilter 无效呢?
另外,我的程序原来是 vc6.0 的工程, 后来使用 vc2005 编译的,不知和这个有没有关系?
------解决方案--------------------
http://support.microsoft.com/kb/173652