Delphi 7调试器在64位环境中冻结

时间:2018-07-02 20:01:20

标签: debugging delphi-7 windows-server-2012

我已在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,并以管理员身份运行该程序。都导致完全相同的行为。

据我所知,这种情况发生在索引任何类型列表的末尾时。

关于我为什么看到这种行为的任何想法?关于如何解决的任何建议(除了永远不要添加从列表末尾索引的手表之外)?

0 个答案:

没有答案