gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:39:48 26 4
gpt4 key购买 nike

我有一个公共(public)属性,具有对私有(private)字段的读写方法。我尝试为字段或属性添加数据断点,但收到“无效地址”错误消息。我用类型名称限定了变量名称。同样的错误。我还尝试在 write 方法上放置一个常规断点,该行变为绿色。

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

更新

这是示例代码:

Type
TCustromer

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

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

最佳答案

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

不过,Delphi 并不是这样工作的。当属性声明表示它写入字段时,对该属性的赋值将直接分配给该字段。没有可以闯入的 setter 方法。

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

实现目标的更简单方法就是为您的属性编写一个 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;

关于delphi - 如何设置在修改属性时触发的断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29571044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com