如何在Delphi调试中查看通用tList?

4
我使用的是 Delphi 10.3.1 COMMUNITY 版本,在调试项目时无法查看通用的 tList。
我知道最新版本的 Delphi 不支持旧式的调试功能,可以查看通用的 tList。因此,我在下面的代码中使用了 tList.List 来评估 tList。
在 "tList.List" 中,我可以查看它,但不能在 "tList.List" 中查看。

enter image description here

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>

在调试期间,“查看”意味着什么? - David Heffernan
1
@DavidHeffernan 我添加了一张图片。谢谢。 - SHIN JaeGuk
1个回答

8
通常情况下,可以通过List属性查看包含数组的列表。在内部,只有一个指针类型的字段,而不是10.3之前的TArray<T>类型。
当我在分配给Caption的行中设置断点并将这两个条目放入我的监视器时,就会看到这个。

enter image description here

更新:看起来链接器是导致您在此处遇到问题的罪魁祸首。当您在观察中取消选中“允许副作用和函数调用”选项时。

enter image description here

手表窗口将显示这个:

enter image description here

我之前在使用仅在单元实现部分中指定的泛型时,曾经见过这种行为。(值得一提的是,当我第一次尝试重现此问题时,我并没有将您发布的代码放入VCL项目中,而是放入了控制台dpr文件中,由于后者没有实现部分,所以我没有看到这种行为。)
为了强制链接器不要删除符号或使调试器实际上看到它(因为即使我禁用内联以强制GetList方法保留,观察窗口也会告诉我它被删除了),您可以简单地将一些虚拟类型放入此或任何其他单元的interface部分。
type TDummy = TList<Integer>;

这将使调试器能够看到该符号并在监视窗口中查看其值。

很奇怪,我已经添加了一张图片。我是不是漏了一个调试选项或什么东西?我根本没有更改任何调试设置。谢谢。 - SHIN JaeGuk
你是正确的。在接口部分放置tList<Integer>的声明解决了问题。Delphi出了什么问题? - SHIN JaeGuk
有人向Embarcadero官方报告了这个问题吗?虽然解决方法可行,但解决方案并不明显。 - bLight
好的,需要使用这些手表的核心问题已经被我报告了:https://quality.embarcadero.com/browse/RSP-22014。 - Stefan Glienke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接