I could not find any official place where ReturnAddress is documented even though it is used at quite a few places in the RTL, VCL, FMX and 3rd party libraries like DUnitX, Spring4D, JCL, ReportBuilder, TeeChart.
I tried searching it in the contexts of Delphi 2007, Delphi 2009, but there is only a [Archive.is] different System.ObjAuto.TParameters.ReturnAddress documented in XE2 and higher.
procedure Abort; begin raise EAbort.CreateRes(@SOperationAborted) at ReturnAddress; end;
There is a (usually broken*) ReturnAddr function used in various places of the RTL/VCL/FMX and (therefore wrongfully copied) in many other peoples code.
function ReturnAddr: Pointer; // From classes.pas asm MOV EAX,[EBP+4] // sysutils.pas says [EBP-4], but this works ! end;
- See the above link; I think this was fixed in Delphi XE, but the issue is still open.
Related to the above is the documented ExceptAddr.
I’ve used this in my ExceptionHelperUnit to build a GetStackTrace function in the example gist below.
I found these posts documenting the behaviour of the above intrinsic functions and more:
- [WayBack] Undocumented Delphi routines – Chee Wee’s blog: IT solutions for Singapore and companies worldwide
- [WayBack] delphi – Undocumented intrinsic routines – Stack Overflow
- [WayBack] exception – What does `at ReturnAddress` mean in Delphi? – Stack Overflow
–jeroen







