LazDebuggerFp: fix asm-step-over wrongly stops at finally block in nested code. Issue #41226

(cherry picked from commit 929c9e68ca)
This commit is contained in:
Martin 2024-11-06 13:48:37 +01:00
parent 3fca59ea2e
commit f39025ab18

View File

@ -3089,7 +3089,7 @@ begin
Eax := CurrentThread.RegisterValueList.FindRegisterByDwarfIndex(0).NumValue; Eax := CurrentThread.RegisterValueList.FindRegisterByDwarfIndex(0).NumValue;
FAddressFrameListSehW32Finally.RemoveOutOfScopeFrames(EAX, FBreakPoints[bplSehW32Finally]); FAddressFrameListSehW32Finally.RemoveOutOfScopeFrames(EAX, FBreakPoints[bplSehW32Finally]);
if (ACurCommand is TDbgControllerLineStepBaseCmd) and if (ACurCommand is TDbgControllerHiddenBreakStepBaseCmd) and
not CheckCommandFinishesInFrame(Eax) not CheckCommandFinishesInFrame(Eax)
then then
exit; exit;
@ -3200,7 +3200,7 @@ begin
if (not CurrentProcess.ReadAddress(R8 + 160, Base)) or (Base = 0) then // RPB at finally if (not CurrentProcess.ReadAddress(R8 + 160, Base)) or (Base = 0) then // RPB at finally
exit; exit;
if ( (FState = esIgnoredRaise) or (ACurCommand is TDbgControllerLineStepBaseCmd) ) and if ( (FState = esIgnoredRaise) or (ACurCommand is TDbgControllerHiddenBreakStepBaseCmd) ) and
not CheckCommandFinishesInFrame(Base) not CheckCommandFinishesInFrame(Base)
then then
exit; exit;
@ -3312,7 +3312,7 @@ begin
FBreakPoints[bplSehW64Finally].RemoveAddress(PC); FBreakPoints[bplSehW64Finally].RemoveAddress(PC);
// At the start of a finally the BasePointer is in RCX // reg 2 // At the start of a finally the BasePointer is in RCX // reg 2
if (ACurCommand is TDbgControllerLineStepBaseCmd) and if (ACurCommand is TDbgControllerHiddenBreakStepBaseCmd) and
not CheckCommandFinishesInFrame(CurrentThread.RegisterValueList.FindRegisterByDwarfIndex(2).NumValue) not CheckCommandFinishesInFrame(CurrentThread.RegisterValueList.FindRegisterByDwarfIndex(2).NumValue)
then then
exit; exit;