我已经死了
type TProcedure = procedure(const messageText : String) of object;
以后会有一个decodeProcedure : TProcedure;
类型的变量,它会在不同的地方分配。
当我在一个breakpint停止时,我怎么能看到变量指向哪个程序?
如果我Debug/evaluate
或add watch
我收到错误E2035 Not enough actual parameters
(Delphi XE 2)
答案 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屏幕截图
如您所见,local variables
窗口显示了decodeprocedure指向TFooClass.Bar
方法的内容。
<强>更新强>
您还可以将Self
表达式添加到监视列表以获得相同的结果