2017-02-06 13 views
-1

プログラムがフリーズすることがあります。 「プログラムを一時停止」をクリックすると、次のように表示されます。プログラムはフリーズしますが、CPU使用率はゼロです

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 

「コールスタック」ウィンドウが空です!

3回F8を押すと、プログラムは、私はオンデマンドでそれを再現することはできませんが、私は1日1回の問題を参照してください

ntdll.RtlInitializeExceptionChain: 
7735989F 8BFF    mov edi,edi 

にジャンプする(多分少ないです?)。
コンパイラ/デバッガは32ビットで動作しています。

これはデバッガの問題ですか?私は過去に似たようなことに遭遇しました。あなたのDelphiアプリケーションから外部アプリケーションを実行すると、デバッガがフリーズすることがあります。これはDelphi XE7の文書化されたバグです。だから、これは似た/関連するバグかもしれないと思っていますか?


+1

私の場合はCPUが0%でスレッドを選択できません:http://stackoverflow.com/questions/13057133/stopping-delphi-program-in-an-infinite-loop – Ampere

+1

難しいと言います。非常に簡単にあなたのコードの欠陥になる可能性があります。それは確かに最も可能性の高い説明です。 –

+1

それはまさにそれがしたことです。コードの不具合のためにデッドロックのような臭いがあります。一般的な規則として、逆の証拠を見つけるまで、欠陥はシステムではなくコードにあると仮定してください。 –

答えて

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デバッガの欠陥です。

関連する問題