Esempio n. 1
0
//程序崩溃注册函数
//IsPreventOtherExceptionHandling如果设置成true会屏蔽其他地方对SetUnhandledExceptionFilter的调用
void MiniDump(bool IsDumpWithFullMemory,
              bool IsPreventOtherExceptionHandling)
{

    ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
    ::SetUnhandledExceptionFilter( (LPTOP_LEVEL_EXCEPTION_FILTER)my_exception_handle );
    ::_set_purecall_handler(purecall_handler);
    ::_set_invalid_parameter_handler(invalidparameter_handle);

    g_IsDumpWithFullMemory = IsDumpWithFullMemory;

    //申请保留虚拟地址空间
    g_ReserveVirtualMemManage.GetAddrsSpace(R_A_S);

    if(IsPreventOtherExceptionHandling)
        DisableSetUnhandledExceptionFilter();

    return;
}
void CExceptionParser::Init(UINT HandleMode)
{
	

	if(HandleMode&EXCEPTION_SET_DEFAULT_HANDLER)
	{
		SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ExceptionHander);

		

		//_set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
		signal(SIGABRT,SignalHandler);
		//_set_invalid_parameter_handler(InvalidParameterHandler);

	}
	if(HandleMode&EXCEPTION_USE_API_HOOK)
	{
		DisableSetUnhandledExceptionFilter();
	}
	if(HandleMode&EXCEPTION_SET_TRANSLATOR)
		_set_se_translator(ExceptionTranslator);
}