Когда в 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), он делает несколько шагов на несколько строк, затем блокируется, пока я снова не нажму break, после чего я получаю тот же результат.
delphi
. - person Ken White   schedule 25.10.2012