Frame-based Exception Handling
A
frame-based exception handler is a mechanism by which a developer deals with the possibility that an
exception may occur in a certain sequence of code. A frame-based exception handler
consists of the following elements.
- A guarded body of code
- A filter expression
- An exception-handler block
Frame-based exception handlers are declared in language-specific syntax. For
example, in the Microsoft® C Optimizing Compiler, they are implemented by the
try-
except statement. For more information about the Microsoft C exception-handling
syntax, see
Syntax.
The
guarded body of code is a set of one or more statements for which the filter expression and the
exception-handler block provide exception-handling protection. The guarded body
can be a block of code, a set of nested blocks, or an entire procedure or
function. In Microsoft C, a guarded body is enclosed by braces ({}) following the
try keyword.
The
filter expression of a frame-based exception handler is an expression that is evaluated by the
system when an exception occurs within the guarded body. This evaluation
results in one of the following actions by the system.
- The system stops its search for an exception handler, restores the machine
state, and continues thread execution at the point at which the exception
occurred.
- The system continues its search for an exception handler.
- The system transfers control to the exception handler, and thread execution
continues sequentially in the stack frame in which the exception handler is
found. If the handler is not in the stack frame in which the exception occurred, the
system unwinds the stack, leaving the current stack frame and any other stack
frames until it is back to the exception handler's stack frame. Before an
exception handler is executed, termination handlers are executed for any guarded
bodies of code that terminated as a result of the transfer of control to the
exception handler. For more information about termination handlers, refer to Termination Handling.
The filter expression can be a simple expression, or it can invoke a
filter function that attempts to handle the exception. You can call the
GetExceptionCode and
GetExceptionInformation functions from within a filter expression to get information about the
exception being filtered.
GetExceptionCode returns a code that identifies the type of exception, and
GetExceptionInformation returns a pointer to an
EXCEPTION_POINTERS structure that contains pointers to
CONTEXT and
EXCEPTION_RECORD structures.
These functions cannot be called from within a filter function, but their
return values can be passed as parameters to a filter function.
GetExceptionCode can be used within the exception-handler block, but
GetExceptionInformation cannot because the information it points to is typically on the stack and is
destroyed when control is transferred to an exception handler. However, an
application can copy the information to safe storage to make it available to the
exception handler.
The advantage of a filter function is that it can handle an exception and
return a value that causes the system to continue execution from the point at which
the exception occurred. With an exception-handler block, in contrast,
execution continues sequentially from the exception handler rather than from the point
of the exception.
Handling an exception may be as simple as noting an error and setting a flag
that will be examined later, printing a warning or error message, or taking some
other limited action. If execution can be continued, it may also be necessary
to change the machine state by modifying the context record. For an example of
a filter function that handles a page fault exception, see
Memory Management.
The
UnhandledExceptionFilter function can be used as a filter function in a filter expression. It returns
EXCEPTION_EXECUTE_HANDLER unless the process is being debugged, in which case
it returns EXCEPTION_CONTINUE_SEARCH.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database