已知的构造使Delphi IDE崩溃

问题描述 投票:1回答:4

我正在使用Turbo Explorer 2006(更新2),有时IDE会在某个单元中崩溃,特别是当我尝试使用类完成时。该单元(和整个项目)正在生产中并运行良好多年,每天进行修改,它只是失败的IDE工具。

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

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

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

delphi delphi-2006
4个回答
1
投票

谷歌搜索[delphi turbo“类完成”崩溃]位于a bug report with what sounds like the same problem you are seeing。错误报告列出了一个解决方法(»更改“TTest”到“TButton”并删除“TButton = class(TTest)”。«),至少对于它给定的测试用例,但我不知道它是否适用于您的情况。


0
投票

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

type
  Foo = array of array of Integer;

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

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

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

0
投票

Delphi IDE和(在较小程度上)编译器非常脆弱。许多非预期的结构会引起奇怪的问题。因此,在你的情况下猜测什么是麻烦并不容易。 (你描述你的单位的方式,我怀疑IFDEF可能会发挥作用。)

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

(* A B *) C D

如果这没有导致错误,请尝试

A B (* C D *)

然后也许吧

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

等等,直到你的单位只剩下一小部分不可减少的部分。由于您正在测试IDE而不是编译器,因此您可能不需要编译出来的单元进行编译而不会出错。


0
投票
{$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。

© www.soinside.com 2019 - 2024. All rights reserved.