在破坏调试信息的单元中定义的通用

Nat*_*Nat 5 delphi generics delphi-2010

这必须是Delphi的bug ...

我有一个单位,这是我的持久性框架的基础.在该单元中,我有一个用于所有域对象的基类,一个列表类和一个通用列表类.

就在最近我注意到,当我在调试时进入单元时,执行将跳转到文件中的某个位置,而不是它应该......可能是四行或五行.重新排序文件没有区别.代码也会生成访问冲突,但只有在我调试它时.

我试图找到原因...我想到了几件事情,比如一些代码注入拧紧调试器(例如这个logitec网络摄像头驱动程序错误),或调试信息与我的单位源不同步(例如dcu被从一些旧的来源拉出来).

最后,我用一个干净的Windows + Delphi安装启动了一个虚拟机,只抓住了我需要测试的单元,我创建了一个小的DUnit项目来测试它.同样的问题.

然后我开始一次从设备中取出东西直到它工作.唯一不同的是我删除了通用列表类.

有没有人见过这个问题?有谁知道如何绕过它?

提前致谢,

N - [

更新:将通用添加回单元会使问题回来,因此这不是陈旧DCU的问题.

Nat*_*Nat 2

最后,我能找到的唯一有效的解决方案是将通用列表移出该单元。

更新2011-08-03为了更好地充实我的解决方案:

Domain我在我的单元中使用基TDomainObject类和非通用版本定义了通用列表基类。

为了解决这个问题,我将通用药物移至第二个Domain.Generics单元,这为我解决了问题。

所以:

unit Domain;

interface 

type
  TDomainObject = class
    //blah de blah
  end;

  TDomainObjectList = class (TDomainObject)
    //more stuff
  end;

  TDomainListEnumerator = class
    //etc
  end;
Run Code Online (Sandbox Code Playgroud)

和:

unit Domain.Generics;

interface

type

  TDomainObjectList<T: TDomainObject> = class (TDomainObjectList)
    //stuff
  public
    property Items[AIndex: integer]: T read GetItem write SetItem;

    type
      TEnumerator = class (TDomainListEnumerator)
      public
        function GetCurrent: T;
        property Current: T read GetCurrent;
      end;

  public
    function GetEnumerator: TEnumerator;

  end;
Run Code Online (Sandbox Code Playgroud)