有时我的程序冻结了。如果我点击“暂停程序”,它会显示我:
ntdll.RtlUserThreadStart:
773301C4 89442404 mov [esp+$04],eax
773301C8 895C2408 mov [esp+$08],ebx
773301CC E9E9960200 jmp $773598ba
773301D1 8DA42400000000 lea esp,[esp+$0000]
773301D8 8DA42400000000 lea esp,[esp+$0000]
773301DF 90 nop
'调用堆栈'窗口是空的!
按F8三次,程序跳转到
ntdll.RtlInitializeExceptionChain:
7735989F 8BFF mov edi,edi
我无法按需复制,但我每天都会看到一次问题(可能更少?) 编译器/调试器以32位运行。
知道这是否是调试器问题?我在过去遇到类似的事情:有时当你从Delphi应用程序运行外部应用程序时,调试器会冻结。这是Delphi XE7的文档错误。所以,我在想,也许这是一个类似/相关的错误?
答案 0 :(得分:1)
我在这里取得进步!我在我的程序中发现了类似的问题。当我尝试在自定义列表框中加载大文本(超过100000)时出现冻结,因为此代码:
MyListBox.Items.Text:= xxx;
procedure TMyListBox.LBADDSTRING(var M: TMessage); { This makes the control slow when I work with 100000 lines }
begin
inherited;
if Assigned(FOnChange)
then FOnChange(Self, lbAdded);
end;
执行点为每一行(100000次)运行LBADDSTRING。所以,似乎冻结了。
奇怪的是,如果我暂停程序,Delphi无法准确显示我的程序的执行点(我检查了所有5个线程)。所以,这一切最终都是Delphi调试器的缺陷。