当前位置 : 主页 > 编程语言 > delphi >

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

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一个公共属性,具有对私有字段的读写方法.我尝试为字段或属性添加数据断点,我收到“无效地址”错误消息.我使用类型名称限定变量名称.相同的错误. 我还尝试在write方法上放置一
我有一个公共属性,具有对私有字段的读写方法.我尝试为字段或属性添加数据断点,我收到“无效地址”错误消息.我使用类型名称限定变量名称.相同的错误.
我还尝试在write方法上放置一个常规断点,然后该行变为绿色.

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

更新

这是一个示例代码:

Type
 TCustromer

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

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

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

但是,Delphi不会那样工作.当属性声明表明它写入字段时,属性的赋值直接分配给字段.没有固定方法可以突破.

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

实现目标的更简单方法就是为您的财产编写一个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;
网友评论