Delphi 7 Debugger зависает в 64-битных средах - PullRequest
0 голосов
/ 02 июля 2018

Я повторил эту проблему на 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 в каждом возможном режиме совместимости И запускать программу от имени администратора. Все приводят к одинаковому поведению.

Лучшее, что я могу сказать, это происходит при индексации конца любого вида списка.

Есть идеи, почему я вижу это поведение? Любые предложения о том, как я мог бы исправить (кроме как никогда не добавлять часы, которые индексируются в конце списка)?

...