程序冻结,但CPU利用率为零 [英] Program freezes but the CPU utilization is zero
问题描述
有时我的程序死机了。如果我单击暂停程序,它将显示以下信息:
Sometimes my program freezes. If i click 'Pause program' it shows me this:
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键,程序跳转到
Pressing F8 three times, the program jumps to
ntdll.RtlInitializeExceptionChain:
7735989F 8BFF mov edi,edi
我无法按需复制它,但是每天看到一次问题(也许更少?)。
编译器/调试器以32位运行。
I cannot reproduce it on demand but I see the problem once per day (maybe less?).
The compiler/debugger is running in 32 bit.
知道这是否是调试器问题吗?我过去遇到过类似的情况:有时,当您从Delphi应用程序运行外部应用程序时,调试器冻结。这是Delphi XE7的一个已记录错误。所以,我在想,也许这是一个类似/相关的错误?
Any idea if this is a debugger problem? I encountered something similar in the past: sometimes when you run an external application from your Delphi app, the debugger freezes. This is a documented bug for Delphi XE7. So, I am thinking, maybe this is a similar/related bug?
推荐答案
我在这里取得进步!我在我的程序中发现了类似的问题。由于以下代码,当我尝试在自定义列表框中加载大文本(超过100000)时,出现冻结:
I am making progress here! I have found a similar issue in a program of mine. The freeze appears when I try to load a large text (over 100000) in a custom list box because of this code:
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;
执行点通过LBADDSTRING每行(100000次)。因此,似乎冻结了。
The execution point runs through LBADDSTRING for every line (100000 times). So, it seems frozen.
奇怪的是,如果我暂停程序,Delphi无法准确显示程序的执行点(我检查了所有5个线程)。因此,所有这些最终都是Delphi调试程序的缺陷。
Odd is also the fact, that if I pause the program, Delphi cannot accurately show the execution point for my program (I checked all 5 threads). So, all this is in the end a Delphi debugger flaw.
这篇关于程序冻结,但CPU利用率为零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!