Deteniendo el programa delphi en un bucle infinito
Cuando se produce un bucle indefinido en Delphi, el depurador ni siquiera me da un seguimiento de la pila cuando presiono el botón de parada. Si tengo la sospecha de que el programa se está estancando, puedo poner un punto de interrupción y se detendrá si ese es el bucle indefinido correcto.
Aquí hay un programa de ejemplo para causar deliberadamente un bucle indefinido:
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;
Cuando se detiene, me sale algo que parece:
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
...
A medida que paso un solo paso (F7), solo pasos unas pocas líneas, luego se bloquea hasta que golpee break otra vez, en cuyo punto obtengo el mismo resultado.