Stoppen des Delphi-Programms in einer Endlosschleife

Wenn in Delphi eine unbestimmte Schleife auftritt, gibt mir der Debugger nicht einmal einen Stack-Trace, wenn ich die Stop-Taste drücke. Wenn ich den Verdacht habe, dass das Programm blockiert, kann ich einen Haltepunkt setzen, der stoppt, wenn dies die richtige unbestimmte Schleife ist.

Hier ist ein Beispielprogramm, um absichtlich eine unbestimmte Schleife zu verursachen:

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;

Wenn ich angehalten werde, erhalte ich etwas, das so aussieht:

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

...

Wenn ich einen Schritt (F7) mache, springt er ein paar Zeilen weiter und bleibt dann stehen, bis ich wieder break drücke. An diesem Punkt erhalte ich das gleiche Ergebnis.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage