Delphi中有类似PHP的vardump的函数吗?

Pet*_*ner 5 delphi debugging delphi-7

我已经放弃了 Delphi 7 调试器,并且非常依赖于输出调试字符串。是否有一个标准函数可以调用以将对象的内容作为字符串获取,就像设置断点时调试器会执行的那样?

ska*_*adt 5

不完全是您想要的,但您可以使用 RTTI 来访问各种已发布属性的值。神奇的例程位于 TypInfo 单元中。您可能最感兴趣的是 GetPropList 它将返回对象属性的列表,以及 GetPropValue 它将允许您获取属性的值。

procedure TForm1.DumpObject( YourObjectInstance : tObject );
var
  PropList: PPropList;
  PropCnt: integer;
  iX: integer;
  vValue: Variant;
  sValue: String;
begin
  PropCnt := GetPropList(YourObjectInstance,PropList);
  for iX := 0 to PropCnt-1 do
    begin
      vValue := GetPropValue(YourObjectInstance,PropList[ix].Name,True);
      sValue := VarToStr( vValue );
      Memo1.Lines.Add(PropList[ix].Name+' = '+sValue );
    end;
end;
Run Code Online (Sandbox Code Playgroud)

例如,在主窗体的按钮单击上使用 DumpObject(Self) 运行此命令,它将把当前窗体的所有属性转储到备忘录中。这只是已发布的属性,并且要求主类要么从 TPersistent 派生,要么在对象之前打开 {$M+} 进行编译。

有传言称 Delphi 的未来版本(可能是 2010 年)将提供类似“反射器”的功能。