[fpc-devel] Debug info for SEH exceptions (64 bit and upcoming 3.2 32 bit)

Martin fpc at mfriebe.de
Wed Jan 9 14:54:43 CET 2019

Marco V wrote  ( 
> Current holdup is enabling SEH by default for 32-bit windows, so that 
> it is COM compatible

This reminds me of an unsolved issued, debugging exceptions with SEH 
(currently Win64, but apparently soon Win32 too)

The debugger (IDE + gdb/lldb, // todo for fpdebug) can currently "step 
to except" and "step to finally" (except Win64 / seh).

If an exception is raised the debugger stops on fpc_raiseexception. (and 
re-raise if needed)
- If stopped F8 will step to next except or finally
- If it is ignored during a step-over, the debugger will step to the 
next except/finally enclosing the line where the step started. (stepping 
over any except/finally inside function calls)

To do this the debugger will set breakpoints at  fpc_popaddrstack, 
fpc_catches, fpc_reraise
If it reaches fpc_popaddrstack, fpc_catches, it needs to step-out once, 
and will be in finally or except.

With SEH that does not work.
And with SEH, I am unaware of sufficient debug info to implement all of 
this in any other fashion. (some of it can be done)

On Win64 a breakpoint can be set to RtlUnwindEx
This will be called with the "except" handle address as 2nd argument. 
(IIRC, 2nd arg)
The address can be extracted, and a breakpoint can be set to it.
=> except block can be stepped to.

As for the finally block, I have not yet found a way.
__FPC_specific_handler will be called. And somewhere within it, it will 
call the finally handler. No way to intercept by the debugger. (It would 
need to set a breakpoint in the middle of __FPC_specific_handler, but 
there is no debug info to find the line that calls "finally")

On Win32 I did some testing with SEH, and IIRC (but not sure its a while 
ago) I could catch neither except nor finally.
Afaik/IIRC the 2 handlers are...
The __FPC_default_handler calls the except handler directly. So again 
would need a breakpoint in the middle of it)
Same for __FPC_finally_handler

Any idea how to add/use debug info, so a debugger can deal with the above?

More information about the fpc-devel mailing list