Add InternalExceptionBreakPoints property to LazDebuggerFp properties.

This commit is contained in:
ccrause 2024-02-25 17:08:16 +02:00 committed by Martin
parent 3149c5261f
commit 0375bb8ae9
2 changed files with 38 additions and 26 deletions

View File

@ -2795,35 +2795,46 @@ begin
end;
procedure TFpDebugExceptionStepping.DoProcessLoaded;
var
InternalExceptionBPSettings: TInternalExceptionBreakPoints;
begin
FBreakEnabled := [];
FBreakNewEnabled := [];
debuglnEnter(DBG_BREAKPOINTS, ['>> TFpDebugDebugger.SetSoftwareExceptionBreakpoint FPC_RAISEEXCEPTION' ]);
FBreakPoints[bplRaise] := FDebugger.AddBreak('FPC_RAISEEXCEPTION');
FBreakPoints[bplBreakError] := FDebugger.AddBreak('FPC_BREAK_ERROR');
FBreakPoints[bplRunError] := FDebugger.AddBreak('FPC_RUNERROR');
FBreakPoints[bplReRaise] := FDebugger.AddBreak('FPC_RERAISE', nil, False);
FBreakPoints[bplPopExcept] := FDebugger.AddBreak('FPC_POPADDRSTACK', nil, False);
FBreakPoints[bplCatches] := FDebugger.AddBreak('FPC_CATCHES', nil, False);
{$IFDEF MSWINDOWS}
if CurrentProcess.Mode = dm32 then begin
FBreakPoints[bplFpcExceptHandler] := FDebugger.AddBreak('__FPC_except_handler', nil, False);
FBreakPoints[bplFpcFinallyHandler] := FDebugger.AddBreak('__FPC_finally_handler', nil, False);
FBreakPoints[bplFpcLeaveHandler] := FDebugger.AddBreak('_FPC_leave', nil, False);
FBreakPoints[bplSehW32Except] := FDebugger.AddBreak(0, False);
FBreakPoints[bplSehW32Finally] := FDebugger.AddBreak(0, False);
{$IfDef WIN64}
end
else
if CurrentProcess.Mode = dm64 then begin
FBreakPoints[bplFpcSpecific] := FDebugger.AddBreak('__FPC_specific_handler', nil, False);
FBreakPoints[bplSehW64Except] := FDebugger.AddBreak(0, False);
FBreakPoints[bplSehW64Finally] := FDebugger.AddBreak(0, False);
FBreakPoints[bplSehW64Unwound] := FDebugger.AddBreak(0, False);
{$EndIf}
debuglnEnter(DBG_BREAKPOINTS, ['>> TFpDebugDebugger.SetSoftwareExceptionBreakpoints' ]);
InternalExceptionBPSettings := TFpDebugDebuggerProperties(FDebugger.GetProperties).InternalExceptionBreakPoints;
if ieBreakErrorBreakPoint in InternalExceptionBPSettings then
FBreakPoints[bplBreakError] := FDebugger.AddBreak('FPC_BREAK_ERROR');
if ieRunErrorBreakPoint in InternalExceptionBPSettings then
FBreakPoints[bplRunError] := FDebugger.AddBreak('FPC_RUNERROR');
if ieRaiseBreakPoint in InternalExceptionBPSettings then
begin
FBreakPoints[bplRaise] := FDebugger.AddBreak('FPC_RAISEEXCEPTION');
FBreakPoints[bplReRaise] := FDebugger.AddBreak('FPC_RERAISE', nil, False);
FBreakPoints[bplPopExcept] := FDebugger.AddBreak('FPC_POPADDRSTACK', nil, False);
FBreakPoints[bplCatches] := FDebugger.AddBreak('FPC_CATCHES', nil, False);
{$IFDEF MSWINDOWS}
if CurrentProcess.Mode = dm32 then begin
FBreakPoints[bplFpcExceptHandler] := FDebugger.AddBreak('__FPC_except_handler', nil, False);
FBreakPoints[bplFpcFinallyHandler] := FDebugger.AddBreak('__FPC_finally_handler', nil, False);
FBreakPoints[bplFpcLeaveHandler] := FDebugger.AddBreak('_FPC_leave', nil, False);
FBreakPoints[bplSehW32Except] := FDebugger.AddBreak(0, False);
FBreakPoints[bplSehW32Finally] := FDebugger.AddBreak(0, False);
{$IfDef WIN64}
end
else
if CurrentProcess.Mode = dm64 then begin
FBreakPoints[bplFpcSpecific] := FDebugger.AddBreak('__FPC_specific_handler', nil, False);
FBreakPoints[bplSehW64Except] := FDebugger.AddBreak(0, False);
FBreakPoints[bplSehW64Finally] := FDebugger.AddBreak(0, False);
FBreakPoints[bplSehW64Unwound] := FDebugger.AddBreak(0, False);
{$EndIf}
end;
{$ENDIF}
end;
{$ENDIF}
debuglnExit(DBG_BREAKPOINTS, ['<< TFpDebugDebugger.SetSoftwareExceptionBreakpoint ' ]);
debuglnExit(DBG_BREAKPOINTS, ['<< TFpDebugDebugger.SetSoftwareExceptionBreakpoint' ]);
end;
procedure TFpDebugExceptionStepping.DoNtDllLoaded(ALib: TDbgLibrary);

View File

@ -103,7 +103,7 @@ type
{ TFpDebugDebuggerProperties }
TFpDebugDebuggerProperties = class(TDebuggerProperties)
TFpDebugDebuggerProperties = class(TCommonDebuggerProperties)
private
FAutoDeref: Boolean;
FConsoleTty: string;
@ -133,6 +133,7 @@ type
property HandleDebugBreakInstruction: TFpInt3DebugBreakOptions read FHandleDebugBreakInstruction write FHandleDebugBreakInstruction default [dboIgnoreAll];
property IntrinsicPrefix: TFpIntrinsicPrefix read FIntrinsicPrefix write FIntrinsicPrefix default ipColon;
property AutoDeref: Boolean read FAutoDeref write FAutoDeref default False;
property InternalExceptionBreakPoints;
end;