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