16

作为一个例子,给定下面的代码摘录,我想定义一个断点,只要对象字段值发生变化就会触发,并且可以选择在条件(FalseTrue在这种情况下)中断。

type
  TForm1 = class(TForm)
    EnableButton: TButton;
    DisableButton: TButton;
    procedure EnableButtonClick(Sender: TObject);
    procedure DisableButtonClick(Sender: TObject);
  private
    FValue: Boolean; // <== Would like to define a breakpoint here whenever FValue changes.
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DisableButtonClick(Sender: TObject);
begin
  FValue := False;
end;

procedure TForm1.EnableButtonClick(Sender: TObject);
begin
  FValue := True;
end;
4

2 回答 2

28

在调试器下运行应用程序,

从 IDE 菜单中选择“运行”,然后选择最底部的“添加断点”,然后选择“数据断点...”。

输入“Form1.FValue”作为“地址:”字段的输入。您还可以在同一个对话框中设置您的条件。

于 2013-01-04T20:49:53.847 回答
3

感谢 Sertac 的回答和 David 的评论,提供了一些额外的信息。

可以根据具有条件的数组项的更改来定义断点。

在这种情况下,数据断点定义如下:

Form1.FBooleans[0] = True

代码摘录:

type
  TBooleanArray = array of Boolean;

  TForm1 = class(TForm)
    EnableButton: TButton;
    DisableButton: TButton;
    procedure EnableButtonClick(Sender: TObject);
    procedure DisableButtonClick(Sender: TObject);
  private
    FBooleans: TBooleanArray; // Breakpoint defined here with the condition
  public
    constructor Create(AOwner: TComponent); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TForm1.Create(AOwner: TComponent);
var
  AIndex: Integer;
begin
  inherited;
  SetLength(FBooleans, 3);
  for AIndex := 0 to Length(FBooleans) - 1 do
  begin
    FBooleans[AIndex] := (AIndex mod 2) = 1;
  end;
end;

procedure TForm1.DisableButtonClick(Sender: TObject);
begin
  FBooleans[0] := False;
end;

procedure TForm1.EnableButtonClick(Sender: TObject);
begin
  FBooleans[0] := True; // Beakpoint stops here on condition.
end;
于 2013-01-04T23:18:45.377 回答