当在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)时,它单步几行,然后锁定直到我再次击中,此时我得到相同的结果.