Я повторил эту проблему на Windows Server 2012, Windows Server 2012 R2 и Windows Server 2016. Выполните чистую установку Delphi 7. Создайте новый проект с помощью одной формы. В событие 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]
В Delphi 7 на Windows Server 2003 после создания списка вы получите значение для list [0] = "Исключение Delphi EStringListError в $ BLAH". Все еще то, что вы ожидаете. На любой из 64-битных систем перед созданием списка все в порядке.
Однако после создания списка значение для list [0] будет либо «[Evaluating ...]», либо «[process not available]». Отладчик заморожен. Вы не можете добавлять / удалять часы. Вы не можете ни одного шага или запустить программу. Вы должны сбросить программу. Даже после сброса программы список наблюдения все еще заморожен. Вы должны перезапустить Delphi, чтобы вернуться к нормальному поведению.
Я пытался запускать Delphi 7 в каждом возможном режиме совместимости И запускать программу от имени администратора. Все приводят к одинаковому поведению.
Лучшее, что я могу сказать, это происходит при индексации конца любого вида списка.
Есть идеи, почему я вижу это поведение? Любые предложения о том, как я мог бы исправить (кроме как никогда не добавлять часы, которые индексируются в конце списка)?