1

我正在使用 Turbo Explorer 2006(更新 2),有时 IDE 在某个单元中崩溃,特别是当我尝试使用类完成时。该单元(和整个项目)已投入生产,并且多年来一直运行良好,每天都在进行修改,只是 IDE 工具出了问题。

通常如果发生这种情况,Delphi 会在崩溃中幸存下来,但 IDE 的某些部分已失效(例如,工具提示中的调试值,用于其单位不在 .dpr 中的表达式)

我怀疑解析器死在某个特定的结构上,可能是 ifdef'ed,因为这个单元是一个巨大的系统交换机。

sb 是否知道杀死 IDE 的特定构造?我想解决这个问题,这样我就可以再次使用类完成。

4

4 回答 4

1

谷歌搜索 [delphi turbo“类完成”崩溃] 找到了一个错误报告,听起来与您看到的问题相同。错误报告列出了一种解决方法(»将“TTest”更改为“TButton”并删除“TButton = class(TTest)”。«),至少对于给定的测试用例,但我不知道它是否适用于您的情况.

于 2009-06-29T10:56:07.567 回答
1

Delphi IDE 和(在较小程度上)编译器非常脆弱。许多非预期的构造会导致奇怪的问题。因此,要立即猜测您的情况有什么问题并不容易。(你描述你的单位的方式,我怀疑 IFDEF 可能会起作用。)

你不能在问题消失之前注释掉代码上的部分,看看是什么原因导致的吗?如果您的单位是A B C D,请尝试使用

(* A B *) C D

如果这不会导致错误,请尝试

A B (* C D *)

那么也许

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

等等,直到您的单元只剩下一小部分不可还原的部分。由于您测试的是 IDE 而不是编译器,因此您可能不需要注释掉的单元来编译而不会出错。

于 2010-06-21T10:46:44.433 回答
1

我在使用动态多维数组时遇到了一些问题:

type
  Foo = array of array of Integer;

代码完成和重构不起作用,它给出了关于 a 的错误;预期在该声明中的某个地方,但它编译得很好。

我通过修改类型声明来修复它:

type
  Foo = array of TIntegerDynArray; //TIntegerDynArray is declared in Types unit
于 2009-06-29T13:02:46.767 回答
0
{$ifdef something}
   type myclass = class
{$else]
   type myclass = class(existingclass);
{$endif}

似乎很混乱,但不是崩溃。

此外,属性声明中的 ifdef 似乎扰乱了系统。

在 D2009 中,

键入 myrecord = 记录某事:0..31 集;结尾;

似乎抑制了完成(它咕哝着关于 SET),但没有崩溃。

更新

它是完成无法处理的“集合”构造本身(而编译器可以)

更新 2:属性声明中的 IFDEF 也会混淆/崩溃 ide。

于 2009-07-07T12:21:27.823 回答