我已在Windows Server 2012,Windows Server 2012 R2和Windows Server 2016上复制了此问题。全新安装Delphi7。创建具有单个表单的新项目。在表单的OnCreate事件上添加以下代码:
procedure TForm1.FormCreate(Sender: TObject);
var
list: TStringList;
begin
list:= TStringList.Create;
try
Form1.Caption := list[0];
except
on E:Exception do begin
Form1.Caption := E.Message;
end;
end;
list.Free;
end;
运行程序时,您将获得一个空白表格,其窗口标题为“列表索引超出范围(0)”。不太有趣。
现在在此过程的第一行放置一个断点,打开“监视列表”并添加以下监视:
list.Count
list.Text
运行程序。一切都还好。这两个变量都说“在评估程序中表达式是非法的”或“在BLAH访问BLAH时发生访问冲突”,直到创建了列表,然后是list.Count = 0和list.Text =“。现在添加以下手表:
list[0]
在Windows Server 2003的Delphi 7中,创建列表后,您将获得list [0] =“ Delphi异常EStringListError在$ BLAH处的值”。仍然是您所期望的。在创建列表之前的任何64位系统上,一切都很好。 但是,一旦创建了列表,list [0]的值就是“ [正在评估...]”或“ [进程不可访问]”。调试器被冻结。您不能添加/删除手表。您不能单步执行或运行程序。您必须重置程序。即使在重置程序后,监视列表仍被冻结。您必须重新启动Delphi才能使事情恢复正常。
我尝试过在每种可能的兼容模式下运行Delphi 7,并以管理员身份运行该程序。都导致完全相同的行为。
据我所知,这种情况发生在索引任何类型列表的末尾时。
关于我为什么看到这种行为的任何想法?关于如何解决的任何建议(除了永远不要添加从列表末尾索引的手表之外)?