Parando o programa delphi em um loop infinito
Quando um loop indefinido ocorre no Delphi, o depurador não me dará um rastreamento de pilha quando eu apertar o botão Parar. Se eu suspeitar que o programa está travando, posso colocar um ponto de interrupção e ele será interrompido se esse for o loop indefinido correto.
Aqui está um exemplo de programa para deliberadamente causar um loop 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;
Quando parado, recebo algo parecido com:
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
...
Como eu passo único (F7), ele único etapas algumas linhas, em seguida, bloqueia até que eu bata quebrar novamente, ponto em que eu recebo o mesmo resultado.