R e: Catching access violation exceptions
From: Steven Reddie (smr_at_essemer.com.au)
Date: 13 Nov 2003 22:00:52 -0800
In article <firstname.lastname@example.org>, Juergen
>In article <email@example.com>, Steven
>> I understand that access violations aren't part of the standard C++
>> exception handling support. On Windows, a particular MSVC compiler
>> option enables Microsoft's Structured Exception Handling (SEH) in
>> EH so that a catch (...) will catch an access violation. I don't
>> if other platforms support something similar.
>> I'm wondering about how to best protect an application or library
>> poorly written user-defined callbacks. It would be nice to be able
>> automatically unregister a user-defined callback if it is found to
>> cause any exception including access violations. Does anyone know
>> a platform-independant method for achieving this?
>No, not really. You can use whatever signal handling is available,
>though signals aren't a C++ thing.
>So staying off topic of this group for a little bit more IMHO the
>idea of trying to "fix" anything during runtime here isn't such a
>idea either as a signal may be risen *after* some damage has been
>done and so from there on all bets are off.
>Say should your application be some sort of flight control system
>let me leave the plane *NOW*.
I understand the concern, but being able to do this has a use that
supports your point of view. That is that if I can catch an access
violation when calling a user-provided DLL I know that an error
occured. Even if rebooting the system is the best option I can at
least attempt to disable that DLL from being used the next time. A
simple "reboot on access violation because the system is in an unknown
state" approach would mean that I keep hitting the same problem and
the plane crashes anyway. Also, assuming that an access violation
means that the system must be rebooted immediately may be just as bad
as assuming that no access violation means that the system is okay.
Catching an access violation is only important in this case if a DLL
is dodgy, and if you may have a dodgy DLL isn't best to do all you can
to detect and recover than do nothing at all? Sure, the system may be
in such a state after an access violation that attempting to flag the
DLL as disabled may not succeed, but if the sh*t hits the fan you have
to do the best you can.