I don't know what is indented there. But probably.
Also make sure to indicate the debug info you use (most likely Dwarf) (though afaik on Win 32 bit you can still do stabs)
And probably your OS too.
Note that very likely you will get unexpected resolves. Either for "raise" or "raise at"
But that is not due to the BackTraceStrFunc
raise Exception.create('abc') at get_caller_addr(get_frame), get_caller_frame(get_frame);
The "at" returns the address of the asm instruction after the "call" (and often that is in the next Pascal code line).
And, if the BackTraceStrFunc is fixed, then on any stack dump, for any caller it will report (in some/many cases, but not always) the next line.
(well that then may depend on OS, CPU and debug info...)
So I don't know if the "bug" is intentional.
Currently the BackTraceStrFunc returns (at least in some cases / not verified) the line before (or is it the line of the address before / which is different, but which may be wanted)
This "bug" solves the "address after call instruction" issue.
Technically it resolves it in the wrong place (if it is meant as a resolve, which I do not know). Because BackTraceStrFunc does not know if the address it deals with, comes from a stacktrace, or other place.
Note that this may not apply to all CPU architectures. And OS and debug info type can have an impact, but not sure if they do.