Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Embarcadero Delphi 10.3 IDE调试器中,在程序变量中使用变量后,是否有方法监视其他程序中的变量?_Delphi - Fatal编程技术网

在Embarcadero Delphi 10.3 IDE调试器中,在程序变量中使用变量后,是否有方法监视其他程序中的变量?

在Embarcadero Delphi 10.3 IDE调试器中,在程序变量中使用变量后,是否有方法监视其他程序中的变量?,delphi,Delphi,Embarcadero Delphi 10.3 IDE调试器中是否有一种方法可以在变量(x)用于过程变量(ReasonProcedure)后监视其他过程(TestProcedure、DebugProcedure)中的变量(x)?观察并评估/修改返回“不可访问值”或“E2003未声明标识符” program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; procedure ReasonProcedure(p: TP

Embarcadero Delphi 10.3 IDE调试器中是否有一种方法可以在变量(x)用于过程变量(ReasonProcedure)后监视其他过程(TestProcedure、DebugProcedure)中的变量(x)?观察并评估/修改返回“不可访问值”或“E2003未声明标识符”

program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils;

procedure ReasonProcedure(p: TProc);
begin
  p;
end;

procedure TestProcedure;
var
  x: integer;

  procedure DebugProcedure;
  begin
    x := 1;
  end;

begin
  x := 0;
  DebugProcedure;
  ReasonProcedure(procedure
  begin
    x := 2;
  end);
end;

begin
  TestProcedure;
end.
一个选择是:

program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils;

var P2X: PINT;

procedure ReasonProcedure(p: TProc);
begin
  p;
end;

procedure TestProcedure;
var
  x: integer;

  procedure DebugProcedure;
  begin
    x := 1;
  end;

begin
  P2X:=@x;  // Keep address of local variable in P2X pointer //
  x := 0;
  DebugProcedure;
  ReasonProcedure(procedure
  begin
    x := 2;
  end);
end;

begin
  TestProcedure;
end.
然后把手表放在P2X上^

我不是100%确定它能在匿名方法中工作,但我相信它能

如果不想添加一个新变量来包含指向要监视的变量的指针,则需要在TestProcedure的条目上放置一个断点,在@x,x上进行求值以获取其地址,然后在PINT($)上进行监视^

但是,请注意,在后一种情况下,您必须在TestProcedure的每个后续条目上刷新监视,因为变量位于堆栈上,下次可能位于不同的地址上