From ce36789c369580d882f454621fbcfdb291542b5f Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 16 Sep 2019 23:14:19 +0000 Subject: [PATCH] LazDebuggerFp: Improve OnIdle handling git-svn-id: trunk@61893 - --- .../lazdebuggerfp/fpdebugdebugger.pas | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/components/lazdebuggers/lazdebuggerfp/fpdebugdebugger.pas b/components/lazdebuggers/lazdebuggerfp/fpdebugdebugger.pas index 29baef67eb..d49d1ef3f9 100644 --- a/components/lazdebuggers/lazdebuggerfp/fpdebugdebugger.pas +++ b/components/lazdebuggers/lazdebuggerfp/fpdebugdebugger.pas @@ -139,6 +139,7 @@ type procedure DebugLoopFinished; procedure QuickPause; procedure DoRelease; override; + procedure DoOnIdle; procedure DoState(const OldState: TDBGState); override; function GetIsIdle: Boolean; override; {$ifdef linux} @@ -1565,7 +1566,9 @@ begin begin Application.QueueAsyncCall(@ProcessASyncWatches, 0); FWatchAsyncQueued := True; - end; + end + else + DoOnIdle; end; procedure TFpDebugDebugger.ClearWatchEvalList; @@ -2029,6 +2032,20 @@ begin inherited DoRelease; end; +procedure TFpDebugDebugger.DoOnIdle; +begin + if not Assigned(OnIdle) then + exit; + FIsIdle := True; + try + OnIdle(Self); + except + on E: Exception do + DebugLn(['exception during idle ', E.ClassName, ': ', E.Message]); + end; + FIsIdle := False; +end; + procedure TFpDebugDebugger.DoState(const OldState: TDBGState); begin LockRelease; @@ -2042,17 +2059,9 @@ begin else if (State in [dsPause, dsInternalPause]) and not(OldState in [dsPause, dsInternalPause{, dsInit}]) and - Assigned(OnIdle) - then begin - FIsIdle := True; - try - OnIdle(Self); - except - on E: Exception do - DebugLn(['exception during idle ', E.ClassName, ': ', E.Message]); - end; - FIsIdle := False; - end; + (not Assigned(FWatchEvalList) or (FWatchEvalList.Count = 0)) + then + DoOnIdle; finally UnlockRelease; end;