Как просмотреть общий tList во время отладки Delphi

Я использую версию Delphi 10.3.1 COMMUNITY и не могу просматривать общий tList во время отладки проекта.

Я знаю, что последняя версия Delphi не поддерживает функцию отладки старого типа, которая позволяет просматривать общий tList. Поэтому я использовал tList.List в следующем коде для оценки tList.

В tList<tRecord>.List я могу изучить это, но не могу сделать это в tList<Integer>.List.

введите здесь описание изображения

type
  tRecord = record
    Field: Integer;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  _Record: tRecord;
  _List1: TList<tRecord>;
  _List2: TList<Integer>;
  i: Integer;
begin
  _List1 := TList<tRecord>.Create;
  _List2 := TList<Integer>.Create;

  for i := 0 to 4 do
  begin
    _Record.Field := i;

    _List1.Add(_Record);
    _List2.Add(i);
  end;

  Caption := IntToStr(_List1.List[0].Field) + IntToStr(_List2.List[0]);

  _List1.Free;
  _List2.Free;
end;

Как я могу заглянуть в tList<Integer> во время отладки?


person SHIN JaeGuk    schedule 12.06.2019    source источник
comment
Что для вас значит изучение во время отладки?   -  person David Heffernan    schedule 12.06.2019
comment
@DavidHeffernan Я добавил изображение. Спасибо.   -  person SHIN JaeGuk    schedule 12.06.2019


Ответы (1)


Обычно должно быть возможно увидеть списки, содержащиеся в массиве, по свойству List. Внутри есть только поле типа Pointer, в отличие от до 10.3, когда оно было типа TArray<T>.

Вот что я вижу, когда ставлю точку останова в строку, где она назначается Caption, и помещаю эти две записи в свои часы:

введите описание изображения здесь

Обновление: похоже, что компоновщик несет ответственность за проблему, с которой вы столкнулись. Когда вы снимаете флажок «Разрешить побочные эффекты и вызовы функций» в часах

введите описание изображения здесь

окно просмотра покажет это:

введите описание изображения здесь

Я видел такое поведение раньше при использовании дженериков, которые указаны только в части реализации модуля (FWIW, когда я пытался воспроизвести это в первый раз, я не помещал код, который вы разместили, в проект VCL, а в консольный dpr и что у одного нет части реализации, поэтому я не видел такого поведения).

Чтобы заставить компоновщик не удалять символ или отладчик действительно его видел (потому что даже если я отключу встраивание, чтобы заставить метод GetList остаться, окно наблюдения сообщит мне, что он был удален), вы можете просто поместить какой-то фиктивный тип в часть interface этой или любой другой единицы.

type TDummy = TList<Integer>;

Это приведет к тому, что отладчик увидит символ и увидит значения в окне часов.

person Stefan Glienke    schedule 12.06.2019
comment
Это странно. Я добавил изображение выше. Мне не хватает опции отладки или что-то в этом роде? Я вообще не менял никаких настроек отладки. Спасибо. - person SHIN JaeGuk; 12.06.2019
comment
Ты был прав. Помещение объявления tList‹Integer› в интерфейсную часть решило проблему. Что не так с делфи? - person SHIN JaeGuk; 12.06.2019
comment
Кто-нибудь открывал официальный отчет с embarcadero по этому вопросу, пока обходной путь работает, решение далеко не очевидно. - person bLight; 10.10.2019
comment
Я сообщил об основной проблеме, требующей использования этих часов: quality.embarcadero.com/ просмотреть/RSP-22014 - person Stefan Glienke; 14.10.2019