Delphi中如何设置属性修改时自动触发的断点?
- 内容介绍
- 相关推荐
本文共计459个文字,预计阅读时间需要2分钟。
我有一种公共属性,包括对私有字段的读写方法。我尝试为字段或属性添加数据断点,收到无效地址错误信息。我使用类型名称限定变量名。相同的错误。我还尝试在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;
本文共计459个文字,预计阅读时间需要2分钟。
我有一种公共属性,包括对私有字段的读写方法。我尝试为字段或属性添加数据断点,收到无效地址错误信息。我使用类型名称限定变量名。相同的错误。我还尝试在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;

