mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 08:59:10 +02:00
LazDebugger(Fp)Lldb: improve cancel watch eval (cancel current watch, in mem-reader), on receiving run/step request
git-svn-id: trunk@60652 -
This commit is contained in:
parent
767e4c056c
commit
19b18e1f67
@ -45,10 +45,12 @@ type
|
|||||||
//FThreadId: Integer;
|
//FThreadId: Integer;
|
||||||
//FStackFrame: Integer;
|
//FStackFrame: Integer;
|
||||||
FDebugger: TFpLldbDebugger;
|
FDebugger: TFpLldbDebugger;
|
||||||
|
FEnabled: Boolean;
|
||||||
//FCmd: TLldbDebuggerCommandMemReader;
|
//FCmd: TLldbDebuggerCommandMemReader;
|
||||||
protected
|
protected
|
||||||
// TODO: needs to be handled by memory manager
|
// TODO: needs to be handled by memory manager
|
||||||
//FThreadId, FStackFrame: Integer;
|
//FThreadId, FStackFrame: Integer;
|
||||||
|
property Enabled: Boolean read FEnabled write FEnabled;
|
||||||
public
|
public
|
||||||
constructor Create(ADebugger: TFpLldbDebugger);
|
constructor Create(ADebugger: TFpLldbDebugger);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -152,6 +154,7 @@ type
|
|||||||
property TargetPID;
|
property TargetPID;
|
||||||
{$EndIf}
|
{$EndIf}
|
||||||
property DebugInstructionQueue;
|
property DebugInstructionQueue;
|
||||||
|
property MemReader: TFpLldbDbgMemReader read FMemReader;
|
||||||
protected
|
protected
|
||||||
procedure DoWatchFreed(Sender: TObject);
|
procedure DoWatchFreed(Sender: TObject);
|
||||||
function EvaluateExpression(AWatchValue: TWatchValue;
|
function EvaluateExpression(AWatchValue: TWatchValue;
|
||||||
@ -368,6 +371,8 @@ begin
|
|||||||
FOwner.ProcessLocals(FLocals);
|
FOwner.ProcessLocals(FLocals);
|
||||||
FLocals.RemoveFreeNotification(@DoLocalsFreed);
|
FLocals.RemoveFreeNotification(@DoLocalsFreed);
|
||||||
end;
|
end;
|
||||||
|
if TFpLldbDebugger(Debugger).MemReader <> nil then
|
||||||
|
TFpLldbDebugger(Debugger).MemReader.Enabled := True;
|
||||||
Finished;
|
Finished;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -375,6 +380,8 @@ procedure TFpLldbDebuggerCommandLocals.DoCancel;
|
|||||||
begin
|
begin
|
||||||
inherited DoCancel;
|
inherited DoCancel;
|
||||||
FOwner.FLocalsEvalCancel := True;
|
FOwner.FLocalsEvalCancel := True;
|
||||||
|
if TFpLldbDebugger(Debugger).MemReader <> nil then
|
||||||
|
TFpLldbDebugger(Debugger).MemReader.Enabled := False;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TFpLldbDebuggerCommandLocals.Create(AOwner: TFPLldbLocals; ALocals: TLocals);
|
constructor TFpLldbDebuggerCommandLocals.Create(AOwner: TFPLldbLocals; ALocals: TLocals);
|
||||||
@ -478,6 +485,8 @@ begin
|
|||||||
FOwner.FEvaluationCmdObj := nil;
|
FOwner.FEvaluationCmdObj := nil;
|
||||||
FOwner.ProcessEvalList;
|
FOwner.ProcessEvalList;
|
||||||
Finished;
|
Finished;
|
||||||
|
if TFpLldbDebugger(Debugger).FMemReader <> nil then
|
||||||
|
TFpLldbDebugger(Debugger).FMemReader.Enabled := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFpLldbDebuggerCommandEvaluate.DoFree;
|
procedure TFpLldbDebuggerCommandEvaluate.DoFree;
|
||||||
@ -490,6 +499,8 @@ procedure TFpLldbDebuggerCommandEvaluate.DoCancel;
|
|||||||
begin
|
begin
|
||||||
inherited DoCancel;
|
inherited DoCancel;
|
||||||
FOwner.FWatchEvalCancel := True;
|
FOwner.FWatchEvalCancel := True;
|
||||||
|
if TFpLldbDebugger(Debugger).FMemReader <> nil then
|
||||||
|
TFpLldbDebugger(Debugger).FMemReader.Enabled := False;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//procedure TFpLldbDebuggerCommandEvaluate.DoCancel;
|
//procedure TFpLldbDebuggerCommandEvaluate.DoCancel;
|
||||||
@ -557,6 +568,7 @@ end;
|
|||||||
constructor TFpLldbDbgMemReader.Create(ADebugger: TFpLldbDebugger);
|
constructor TFpLldbDbgMemReader.Create(ADebugger: TFpLldbDebugger);
|
||||||
begin
|
begin
|
||||||
FDebugger := ADebugger;
|
FDebugger := ADebugger;
|
||||||
|
FEnabled := True;
|
||||||
//FCmd := TLldbDebuggerCommandMemReader.Create(ADebugger);
|
//FCmd := TLldbDebuggerCommandMemReader.Create(ADebugger);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -573,6 +585,8 @@ var
|
|||||||
InStr: TLldbInstructionMemory;
|
InStr: TLldbInstructionMemory;
|
||||||
begin
|
begin
|
||||||
Result := False;
|
Result := False;
|
||||||
|
if not Enabled then
|
||||||
|
Exit;
|
||||||
InStr := TLldbInstructionMemory.Create(AnAddress, ASize);
|
InStr := TLldbInstructionMemory.Create(AnAddress, ASize);
|
||||||
try
|
try
|
||||||
FDebugger.DebugInstructionQueue.QueueInstruction(InStr);
|
FDebugger.DebugInstructionQueue.QueueInstruction(InStr);
|
||||||
@ -614,6 +628,8 @@ var
|
|||||||
QItem: TLldbDebuggerCommand;
|
QItem: TLldbDebuggerCommand;
|
||||||
begin
|
begin
|
||||||
Result := False;
|
Result := False;
|
||||||
|
if not Enabled then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
|
||||||
// WINDOWS gdb dwarf names
|
// WINDOWS gdb dwarf names
|
||||||
@ -1090,6 +1106,8 @@ procedure TFpLldbDebugger.DoState(const OldState: TDBGState);
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
if FMemReader <> nil then
|
||||||
|
FMemReader.Enabled := True;
|
||||||
inherited DoState(OldState);
|
inherited DoState(OldState);
|
||||||
if State in [dsStop, dsError, dsNone] then
|
if State in [dsStop, dsError, dsNone] then
|
||||||
UnLoadDwarf;
|
UnLoadDwarf;
|
||||||
|
@ -2187,10 +2187,12 @@ begin
|
|||||||
FIsRunning := True;
|
FIsRunning := True;
|
||||||
d := Debugger;
|
d := Debugger;
|
||||||
try
|
try
|
||||||
|
AddReference;
|
||||||
d.LockRelease;
|
d.LockRelease;
|
||||||
DoExecute; // may call Finished and Destroy Self
|
DoExecute; // may call Finished and Destroy Self
|
||||||
finally
|
finally
|
||||||
d.UnlockRelease;
|
d.UnlockRelease;
|
||||||
|
ReleaseReference;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user