Also hängt sich der Debugger da irgendwo rein und erzeugt den Hänger in irgendeiner Form...
Der Unterschied liegt insbesondere bei Multithreadanwendungen im Timing beim Threadscheduling. Das Zusammenspiel der Threads ändert sich dadurch.
Das kann auch umgekehrt auftreten, nämlich, dass es im Debugger nicht passiert.
Das heißt allerdings nicht, dass das Debuggen direkt mit dem Fehler zu tun hat. Es bedeutet nur, dass es diesen leichter oder schwerer nachstellbar macht.
Ein Punkt, der direkt die Delphi
IDE betrifft:
Diese setzt mit timeBeginPeriod..timeEndPeriod systemweit die Timer-Auflösung herunter, ich glaube auf 1. Dadurch verhalten sich insbesondere Aufrufe von Sleep anders.