如何设置在修改属性时触发的断点?

时间:2015-04-10 21:34:26

标签: delphi delphi-xe

我有一个公共属性,具有对私有字段的读写方法。我尝试为字段或属性添加数据断点,然后我得到一个"无效的地址"错误信息。我使用类型名称限定变量名称。相同的错误。 我还尝试在write方法上放置一个常规断点,然后该行变为绿色。

如何在Delphi XE中更改变量值时中断?

更新

这是一个示例代码:

Type
 TCustromer

private
 customerName: string;
public 
  property CustomerName: string  read customerName   write customerName;
end;

每当CustomerName或customerName值发生变化时,我如何中断?

2 个答案:

答案 0 :(得分:13)

您来自.Net,其中编译器使用存根方法替换直接字段属性设置器。通过该设置,我可以理解为什么IDE可能允许您在属性声明上放置断点并将其解释为这些隐藏存根方法中的断点。

但是,德尔福并没有这样做。当属性声明表明它写入字段时,属性的赋值将直接分配给字段。没有固定方法可以闯入。

要检测程序中对属性的写入,可以尝试设置数据断点。但是,您必须为班级的每个实例执行此操作,因为每个实例的字段显然都位于不同的地址。此外,您必须在重新启动程序的每个时间重新执行此操作,因为实例'从一次运行到另一次运行,地址不一定保持不变。

实现目标的更简单方法就是为您的财产编写一个setter。然后在该setter的实现中设置断点。

type
  TCustomer = class
  private
    FCustomerName: string;
    procedure SetCustomerName(const Value: string);
  public 
    property CustomerName: string read FCustomerName write SetCustomerName;
  end;

procedure TCustomer.SetCustomerName(const Value: string);
begin // Set breakpoint here.
  FCustomerName := Value;
end;

答案 1 :(得分:0)

我知道这是一个老问题,但Delphi过去常常为此目的允许数据断点。我不知道XE是否有它,但我猜它确实如此。