在无限循环中停止delphi程序

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

解决方法

Rob Kennedy在评论中回答.我必须从调试窗口打开一个线程视图来获取线程列表并选择正确的线程;在那一点上,我可以看到我的程序无限循环.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...