如何显示变量指向哪个方法指针?

时间:2012-05-05 00:42:48

标签: delphi

我已经死了

type  TProcedure = procedure(const messageText : String) of object;

以后会有一个decodeProcedure : TProcedure;类型的变量,它会在不同的地方分配。

当我在一个breakpint停止时,我怎么能看到变量指向哪个程序?

如果我Debug/evaluateadd watch我收到错误E2035 Not enough actual parameters

(Delphi XE 2)

1 个答案:

答案 0 :(得分:5)

您可以使用@运算符评估decodeProcedure方法的地址,并将该表达式添加到监视列表窗口,以查看可以使用local variables窗口的过程点。

试试这段代码

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TProcedure = procedure(const messageText : String) of object;
  TFooClass = class
     decodeProcedure  : TProcedure;
   public
     procedure Bar(const messageText : String);
     procedure DoIt;
  end;

Var
  F : TFooClass;
{ TFooClass }

procedure TFooClass.Bar(const messageText: String);
begin
  Writeln(messageText);
end;

procedure TFooClass.DoIt;
begin
  if Assigned(decodeProcedure) then //put a break point here
   decodeProcedure('Hello');
end;

begin
  try
     F:=TFooClass.Create;
     try
       F.decodeProcedure:=F.Bar;
       F.DoIt;
     finally
      F.Free;
     end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

这是一个示例IDE屏幕截图

enter image description here

如您所见,local variables窗口显示了decodeprocedure指向TFooClass.Bar方法的内容。

<强>更新  您还可以将Self表达式添加到监视列表以获得相同的结果

enter image description here