Search code examples
c++windowsminidumpdbghelp

Capturing R6025 pure virtual call


I currently capture MiniDumps of unhandled exceptions using SetUnhandledExceptionFilter however at times I am getting "R6025: pure virtual function".

I understand how a pure virtual function call happens I am just wondering if it is possible to capture them so I can create a MiniDump at that point.


Solution

  • If you want to catch all crashes you have to do more than just: SetUnhandledExceptionFilter

    I would also set the abort handler, the purecall handler, unexpected, terminate, and invalid parameter handler.

    #include <signal.h>
    
    inline void signal_handler(int)
    {
        terminator();
    }
    
    inline void terminator() 
    {
        int*z = 0; *z=13; 
    }
    
    inline void __cdecl invalid_parameter_handler(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t)
    {
       terminator();
    } 
    

    And in your main put this:

     signal(SIGABRT, signal_handler);
     _set_abort_behavior(0, _WRITE_ABORT_MSG|_CALL_REPORTFAULT);
    
     set_terminate( &terminator );
     set_unexpected( &terminator );
     _set_purecall_handler( &terminator );
     _set_invalid_parameter_handler( &invalid_parameter_handler );
    

    The above will send all crashes to your unhandled exception handler.