[fpc-devel] Debug info for SEH exceptions (64 bit and upcoming 3.2 32 bit) [avoid regression in debugger]
Martin
fpc at mfriebe.de
Wed Jan 16 13:32:18 CET 2019
I have added this to mantis.
https://bugs.freepascal.org/view.php?id=34881
It would be good to address this, before 32bit SEH becomes default. If
not this will mean a regression to the debuggers functionality.
On 09/01/2019 14:54, Martin wrote:
> Marco V wrote (
> http://forum.lazarus-ide.org/index.php/topic,42265.msg307537.html#msg307537
> )
>> 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