Известные конструкции, которые разрушают Delphi IDE - PullRequest
1 голос
/ 29 июня 2009

Я использую Turbo Explorer 2006 (обновление 2), и иногда происходит сбой IDE в определенном модуле, особенно когда я пытаюсь использовать завершение класса. Устройство (и весь проект) находятся в производстве и работают в течение многих лет, с ежедневными изменениями, это просто инструменты IDE, которые выходят из строя.

Обычно, если это происходит, Delphi переживает сбой, но некоторые части IDE не функционируют (например, значения отладки во всплывающих подсказках для выражений, единица измерения которых отсутствует в .dpr)

Я подозреваю, что синтаксический анализатор умирает от какой-то конкретной конструкции, возможно, от чего-то, если он определен, поскольку этот модуль является огромным коммутатором систем.

Знает ли sb конкретные конструкции, которые убивают IDE? Я хотел бы исправить это, чтобы я мог снова использовать завершение класса.

Ответы [ 4 ]

1 голос
/ 29 июня 2009

Поиск в Google для [delphi turbo «завершение класса» аварийного завершения] обнаружил отчет об ошибке, который звучит как та же самая проблема, с которой вы сталкиваетесь .В отчете об ошибке перечислены обходные пути («Измените« TTest »на« TButton »и удалите« TButton = class (TTest) ».»), По крайней мере, для данного тестового примера, но я не знаю, применимо ли оно в вашем случае.

0 голосов
/ 21 июня 2010

Delphi IDE и (в меньшей степени) компилятор довольно хрупки. Многие неожиданные конструкции вызовут странные проблемы. Так что нелегко угадать, в чем проблема вашего дела. (Как вы описываете свое подразделение, я подозреваю, что IFDEF могут сыграть свою роль.)

Не можете ли вы закомментировать части кода до тех пор, пока проблема не исчезнет, ​​чтобы увидеть, что может вызвать ее? Если ваш блок A B C D, попробуйте с

(* A B *) C D

, и если это не вызывает ошибок, попробуйте

A B (* C D *)

тогда возможно

(* A *) B (* C D *)

и т.д.. пока не останется только небольшая неприводимая часть вашего устройства. Поскольку вы тестируете IDE, а не компилятор, вам, вероятно, не нужен закомментированный модуль для компиляции без ошибок.

0 голосов
/ 07 июля 2009
{$ifdef something}
   type myclass = class
{$else]
   type myclass = class(existingclass);
{$endif}

Кажется, что сбивает с толку, но не сбой.

Также ifdef в объявлениях свойств, кажется, расстраивает систему.

В D2009,

введите myrecord = record someting: набор 0..31; конец;

, казалось, препятствовал завершению (бормочет о SET), но не вылетал.

обновление

Это сама конструкция "set of", которую не может обработать завершение (в то время как компилятор может)

обновление 2: IFDEF в объявлениях свойств также приводят в замешательство / сбой ide.

0 голосов
/ 29 июня 2009

У меня были некоторые проблемы с динамическим многомерным массивом:

type
  Foo = array of array of Integer;

Завершение кода и рефакторинг не сработали, выдали ошибку о; ожидается где-то в этой декларации, но она скомпилирована просто отлично.

Я исправил это, изменив объявление типа так:

type
  Foo = array of TIntegerDynArray; //TIntegerDynArray is declared in Types unit
...