我正在使用Turbo Explorer 2006(更新2),有时IDE会在某个单元中崩溃,特别是当我尝试使用类完成时。该单元(和整个项目)正在生产中并运行良好多年,每天进行修改,它只是失败的IDE工具。
通常如果发生这种情况,Delphi会在崩溃中幸免于难,但是IDE的某些部分已经不存在(例如,对于单位不在.dpr中的表达式的工具提示中的调试值)
我怀疑解析器在一些特定的构造上死亡,可能是ifdef'ed,因为这个单元是一个巨大的系统交换机。
sb是否知道杀死IDE的特定构造?我想解决这个问题,这样我就可以再次使用类完成了。
谷歌搜索[delphi turbo“类完成”崩溃]位于a bug report with what sounds like the same problem you are seeing。错误报告列出了一个解决方法(»更改“TTest”到“TButton”并删除“TButton = class(TTest)”。«),至少对于它给定的测试用例,但我不知道它是否适用于您的情况。
我在动态多维数组中遇到了一些问题:
type
Foo = array of array of Integer;
代码完成和重构不起作用,它给出了一个错误;在该声明的某处预期,但它编译得很好。
我通过修改类型声明来修复它:
type
Foo = array of TIntegerDynArray; //TIntegerDynArray is declared in Types unit
Delphi IDE和(在较小程度上)编译器非常脆弱。许多非预期的结构会引起奇怪的问题。因此,在你的情况下猜测什么是麻烦并不容易。 (你描述你的单位的方式,我怀疑IFDEF可能会发挥作用。)
你不能在问题消失之前注释掉代码上的部分,看看whay可能会导致它吗?如果您的单位是A B C D
,请尝试使用
(* A B *) C D
如果这没有导致错误,请尝试
A B (* C D *)
然后也许吧
(* A *) B (* C D *)
等等,直到你的单位只剩下一小部分不可减少的部分。由于您正在测试IDE而不是编译器,因此您可能不需要编译出来的单元进行编译而不会出错。
{$ifdef something}
type myclass = class
{$else]
type myclass = class(existingclass);
{$endif}
似乎混淆了,但没有崩溃。
此外,属性声明中的ifdef似乎也打乱了系统。
在D2009,
type myrecord = record someting:set of 0..31;结束;
似乎抑制了完成(它在SET上咕),但没有崩溃。
更新
它是“set of”构造本身完成无法处理(而编译器可以)
更新2:属性声明中的IFDEF也会混淆/崩溃ide。