mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 17:59:16 +02:00
DBG: obey Begin/EndUpdate before attempting to execute brk-point commands
git-svn-id: trunk@28333 -
This commit is contained in:
parent
0c34856eb9
commit
615a8734ce
@ -38,6 +38,9 @@ uses
|
|||||||
Classes, LCLProc;
|
Classes, LCLProc;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
{ TDelayedUdateItem }
|
||||||
|
|
||||||
TDelayedUdateItem = class(TCollectionItem)
|
TDelayedUdateItem = class(TCollectionItem)
|
||||||
private
|
private
|
||||||
FUpdateCount: Integer;
|
FUpdateCount: Integer;
|
||||||
@ -45,11 +48,13 @@ type
|
|||||||
protected
|
protected
|
||||||
procedure Changed;
|
procedure Changed;
|
||||||
procedure DoChanged; virtual;
|
procedure DoChanged; virtual;
|
||||||
|
procedure DoEndUpdate; virtual; // even if not changed
|
||||||
public
|
public
|
||||||
procedure Assign(ASource: TPersistent); override;
|
procedure Assign(ASource: TPersistent); override;
|
||||||
procedure BeginUpdate;
|
procedure BeginUpdate;
|
||||||
constructor Create(ACollection: TCollection); override;
|
constructor Create(ACollection: TCollection); override;
|
||||||
procedure EndUpdate;
|
procedure EndUpdate;
|
||||||
|
function IsUpdating: Boolean;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function GetLine(var ABuffer: String): String;
|
function GetLine(var ABuffer: String): String;
|
||||||
@ -257,10 +262,17 @@ begin
|
|||||||
inherited Changed(False);
|
inherited Changed(False);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TDelayedUdateItem.DoEndUpdate;
|
||||||
|
begin
|
||||||
|
//
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TDelayedUdateItem.EndUpdate;
|
procedure TDelayedUdateItem.EndUpdate;
|
||||||
begin
|
begin
|
||||||
Dec(FUpdateCount);
|
Dec(FUpdateCount);
|
||||||
if FUpdateCount < 0 then raise EInvalidOperation.Create('TDelayedUdateItem.EndUpdate');
|
if FUpdateCount < 0 then raise EInvalidOperation.Create('TDelayedUdateItem.EndUpdate');
|
||||||
|
if (FUpdateCount = 0)
|
||||||
|
then DoEndUpdate;
|
||||||
if (FUpdateCount = 0) and FDoChanged
|
if (FUpdateCount = 0) and FDoChanged
|
||||||
then begin
|
then begin
|
||||||
DoChanged;
|
DoChanged;
|
||||||
@ -268,6 +280,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TDelayedUdateItem.IsUpdating: Boolean;
|
||||||
|
begin
|
||||||
|
Result := FUpdateCount > 0;
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
LastSmartWritelnCount:=0;
|
LastSmartWritelnCount:=0;
|
||||||
|
|
||||||
|
@ -683,7 +683,7 @@ type
|
|||||||
procedure DoCommandDestroyed(Sender: TObject);
|
procedure DoCommandDestroyed(Sender: TObject);
|
||||||
procedure DoCommandExecuted(Sender: TObject);
|
procedure DoCommandExecuted(Sender: TObject);
|
||||||
protected
|
protected
|
||||||
//procedure DoChanged; override;
|
procedure DoEndUpdate; override;
|
||||||
procedure DoEnableChange; override;
|
procedure DoEnableChange; override;
|
||||||
procedure DoExpressionChange; override;
|
procedure DoExpressionChange; override;
|
||||||
procedure DoStateChange(const AOldState: TDBGState); override;
|
procedure DoStateChange(const AOldState: TDBGState); override;
|
||||||
@ -5518,6 +5518,11 @@ end;
|
|||||||
procedure TGDBMIBreakPoint.SetBreakpoint;
|
procedure TGDBMIBreakPoint.SetBreakpoint;
|
||||||
begin
|
begin
|
||||||
if Debugger = nil then Exit;
|
if Debugger = nil then Exit;
|
||||||
|
if IsUpdating
|
||||||
|
then begin
|
||||||
|
FUpdateFlags := [bufSetBreakPoint];
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
if (FCurrentCmd <> nil)
|
if (FCurrentCmd <> nil)
|
||||||
then begin
|
then begin
|
||||||
@ -5608,6 +5613,15 @@ begin
|
|||||||
then UpdateProperties(FUpdateFlags);
|
then UpdateProperties(FUpdateFlags);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TGDBMIBreakPoint.DoEndUpdate;
|
||||||
|
begin
|
||||||
|
if bufSetBreakPoint in FUpdateFlags
|
||||||
|
then SetBreakPoint;
|
||||||
|
if FUpdateFlags * [bufEnabled, bufCondition] <> []
|
||||||
|
then UpdateProperties(FUpdateFlags);
|
||||||
|
inherited DoChanged;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TGDBMIBreakPoint.ReleaseBreakPoint;
|
procedure TGDBMIBreakPoint.ReleaseBreakPoint;
|
||||||
begin
|
begin
|
||||||
if Debugger = nil then Exit;
|
if Debugger = nil then Exit;
|
||||||
@ -5644,7 +5658,7 @@ procedure TGDBMIBreakPoint.SetLocation(const ASource: String; const ALine: Integ
|
|||||||
begin
|
begin
|
||||||
if (Source = ASource) and (Line = ALine) then exit;
|
if (Source = ASource) and (Line = ALine) then exit;
|
||||||
inherited;
|
inherited;
|
||||||
if Debugger = nil then Exit;
|
if (Debugger = nil) or (Source = '') then Exit;
|
||||||
if TGDBMIDebugger(Debugger).State in [dsStop, dsPause, dsRun]
|
if TGDBMIDebugger(Debugger).State in [dsStop, dsPause, dsRun]
|
||||||
then SetBreakpoint;
|
then SetBreakpoint;
|
||||||
end;
|
end;
|
||||||
@ -5653,6 +5667,12 @@ procedure TGDBMIBreakPoint.UpdateProperties(AFlags: TGDBMIBreakPointUpdateFlags)
|
|||||||
begin
|
begin
|
||||||
if (Debugger = nil) then Exit;
|
if (Debugger = nil) then Exit;
|
||||||
if AFlags * [bufEnabled, bufCondition] = [] then Exit;
|
if AFlags * [bufEnabled, bufCondition] = [] then Exit;
|
||||||
|
if IsUpdating
|
||||||
|
then begin
|
||||||
|
if not(bufSetBreakPoint in FUpdateFlags)
|
||||||
|
then FUpdateFlags := FUpdateFlags + AFlags;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
if (FCurrentCmd <> nil)
|
if (FCurrentCmd <> nil)
|
||||||
then begin
|
then begin
|
||||||
|
Loading…
Reference in New Issue
Block a user