catch(…) is not catching an exception, my program is still crashing

后端 未结 4 1087
余生分开走
余生分开走 2021-02-19 17:01

I\'m having a problem with a tester that my application crashes in initialization. I added more logging and exception handling but it still crashes with the generic \"this progr

相关标签:
4条回答
  • 2021-02-19 17:13

    So far I know, there can be at least two situations where catch(...) cannot actually catch

    1. More than 1 unhandled Exception: when an exception is raised before a previously occurred exception is handled, then c++ can not handle it, and application will crash.
    2. Throwing exception that is not in exception specification list: if any method throws an exception which is not in the exception specification list (in any) then unexpected will be called which calls abort.
    0 讨论(0)
  • 2021-02-19 17:15

    Do you declare any global objects? If you have any objects created outside your main loop, that could explain why it is not caught ( it is not in your try-catch ).

    0 讨论(0)
  • 2021-02-19 17:19

    If a C++ catch(...) block is not catching errors maybe it is because of a Windows error.

    On Windows there is a concept called Structured Exception Handling which is where the OS raises "exceptions" when bad things happen such as dereferencing a pointer that is invalid, dividing by zero etc. I say "exceptions" because these are not C++ exceptions; rather these are critical errors that Windows defines in a C-style fashion - this is because Win32 was written in C so C++ exceptions were not viable.

    See also:

    • Difference between a C++ exception and Structured Exception
    • try-except Statement
    • Method of getting a stack trace from an EXCEPTION_POINTERS struct

    Update based on comments

    If you want both C++ exception handing and SEH perhaps you could try the following (untested) code:

    __try
    {
        try
        {
            // Your code here...
        }
        catch (std::exception& e)
        {
            // C++ exception handling
        }
    }
    __except(HandleStructuredException())
    {
        // SEH handling 
    }
    
    0 讨论(0)
  • 2021-02-19 17:25

    If an exception is thrown by the destructor of an object that is destroyed as a result of the stack unwinding to handle a different exception, the program will exit, catch(...) or not.

    0 讨论(0)
提交回复
热议问题