如何在对象字段值更改时定义断点?

时间:2013-01-04 20:40:39

标签: delphi delphi-xe2

作为一个例子,给定下面的代码提取,我想定义一个断点,只要对象字段值发生变化就会触发该断点,并且可选择在这种情况下中断条件(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;

2 个答案:

答案 0 :(得分:25)

在调试器

下运行应用程序

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

输入'Form1.FValue'作为'Adress:'字段的输入。您也可以在同一个对话框中设置条件。

答案 1 :(得分: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;