Delphi で無限ループが発生すると、停止ボタンを押しても、デバッガーはスタック トレースを表示しません。プログラムが停止している疑いがある場合は、ブレークポイントを設定すると、それが正しい無限ループであれば停止します。
以下は意図的に無限ループを発生させるサンプルプログラムです。
procedure TForm1.btnDebugInfiniteLoopClick(Sender: TObject);
var I: Integer;
begin
I:=0;
while I<100 do begin
I:=1+1;
if I>64 then I:=I div 2;
end;
end;
停止すると、次のようになります。
ntdll.RtlUserThreadStart:
776301B4 89442404 mov [esp+$04],eax
776301B8 895C2408 mov [esp+$08],ebx
776301BC E9E99C0200 jmp $77659eaa
776301C1 8DA42400000000 lea esp,[esp+$0000]
776301C8 8DA42400000000 lea esp,[esp+$0000]
776301CF 90 nop
ntdll.KiFastSystemCall:
776301D0 8BD4 mov edx,esp
...
シングル ステップ (F7) を実行すると、数行だけステップ実行し、ブレークを再度押すまでロックされます。ブレークした時点で同じ結果が得られます。