Есть ли способ в отладчике IDE Embarcadero Delphi 10.3 контролировать переменную в других процедурах после того, как она используется в процедурной переменной? - PullRequest
1 голос
/ 14 июля 2020

Есть ли способ в отладчике Embarcadero Delphi 10.3 IDE отслеживать переменную (x) в других процедурах (TestProcedure, DebugProcedure) после того, как она используется в процедурной переменной (ReasonProcedure)? Функция Watch and Evaluate / Modify возвращает «Недоступное значение» или «Необъявленный идентификатор 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.

1 Ответ

1 голос
/ 14 июля 2020

Один из вариантов:

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, выполнить Evaluate на @ x, x, чтобы получить его адрес, а затем ввести Watch on PINT ($ ) ^

Обратите внимание, однако, что в последнем случае вам придется обновлять sh часы на каждом последующая запись TestProcedure, так как переменная находится в стеке и в следующий раз может быть по другому адресу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...