Jea*_*ond 2 delphi debugging for-loop empty-list
在Delphi XE7(我使用RAD Studio)中,我尝试调试包内的代码.我遇到了一个我无法解释的奇怪情况.例如,我有一个类似于下面的功能(注意我知道,这个功能没有任何智能,请不要纠正它,因为我不在现实世界中使用它.它只是一个虚拟函数来说明问题我面对.)
procedure TMyClass.DemoFunc();
var
pTest: TObjectList<TObject>;
pProperty: TObject;
begin
pTest := TObjectList<TObject>.Create;
for pProperty in pTest do
pProperty.ToString;
pTest.Free;
end;
Run Code Online (Sandbox Code Playgroud)
当我调试上面的代码时,我注意到调试器进入了该行
pProperty.ToString;
Run Code Online (Sandbox Code Playgroud)
如果我试着追踪上面的那一行,我会跳到
destructor TObject.Destroy;
Run Code Online (Sandbox Code Playgroud)
但是从我的观点来看,这是完全不合逻辑的,因为pTest显然是空的,所以不应该调用上面的行.
有人可以向我解释这种奇怪的行为吗?
注意我尝试调试的代码是在Delphi包中,但是该函数是从c ++项目调用的.
问候
被销毁的TObject是由编译器为For-In循环隐式创建的Enumerator.它不是"pProperty".如果在TObject.Destroy开始时调试器停止时调出一个Evaluator并输入"self.classname",你会发现它是一个"TList <System.TObject> .TEnumerator".
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |