Name
At Directive
Syntax
raiseExceptionatAddress;
Description
Use the at directive to raise an exception with a
specific address as the origin of the exception. The
Address can be any integer expression.
Tips and Tricks
The
at directive is not used in most applications, but
it can be helpful when writing certain libraries or generic
error-handling packages.
Example
The following example is a subroutine that raises an exception that
uses the caller’s address as the exception address. Thus, you
can call the example procedure anywhere in your application, and when
the debugger stops the application, the position is not where the
exception is truly raised, but where the
RaiseExceptionInCaller procedure is called, which
is much more useful and informative.
procedure RaiseExceptionInCaller;
// Get the return address from the stack and save it in EAX,
// which is the function's result. The value at [ESP] is the
// address of RaiseExceptionInCaller; go back one more frame
// to [ESP+4] to get the caller of RaiseExceptionInCaller.
// If you need to add local variables to RaiseExceptionInCaller,
// you might want to get an offset from EBP instead.
function CallerAddress: Pointer;
asm
mov eax, [esp+4]
end;
begin
raise Exception.Create('Example') at CallerAddress;
end;
procedure Demo;
begin
RaiseExceptionInCaller; // Debugger shows exception here.
end;See Also
| Raise Keyword |
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access