Das könnte schwierig werden, wenn Events dynamisch im Programm zugewiesen werden bzw. Komponenten dynamisch erzeugt werden.
Ja, das kommt erschwerend hinzu.
Wenn der Anwendungsfall wirklich ist "Ich will mitloggen wenn der Hauptthread der Anwendung hängt" würde ich das trotzdem anders machen. Ich hatte so etwas mal angefangen, aber nie zu Ende geführt: Ich meine man konnte einen Thread erstellen der periodisch Messages an den Hauptthread sendet und wenn der nicht schnell genug antwortet konnte man den Stack des Hauptthreads zu dem Zeitpunkt feststellen und das dann loggen. Dann konnte man direkt sehen was sich aufgehangen hat.
Denn selbst wenn man jedes "OnChange"-Event mit seiner Ausführungszeit mitloggt, ich glaube nicht dass ich zuverlässig feststellen könnte, was denn nun diese lang hängende Aktion ausgelöst hat. Was wenn ich drei Frames mit jeweils einem "submitButton: TButton" drauf habe: Woher weiß ich jetzt, welches Absenden das Programm zum Hängen gebracht hat?