Drücken Sie F12, während das Programm im Debugger ausgeführt wird, brechen Sie die Ausführung ab und öffnen Sie den Debugger. Dies funktioniert unter Windows XP (getestet mit D2007 und XE2), aber unter Windows 7 und 8 (auch getestet mit D2007 und XE2; getestet auf drei Computern).
Registrierung ist richtig eingerichtet (Windows 7):
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug] "UserDebuggerHotKey" = dword: 00000000 "Debugger"="\" C: \ Windows \ system32 \ vsjitdebugger.exe \ "-p% ld -e% ld"
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ AktuelleVersion \ AeDebug \ AutoExclusionList] "DWM.exe" = dword: 00000001
Die XP-Installation legt auch "Auto"="1" fest und lässt die AutoExclusionList aus, aber das Duplizieren dieser Änderungen auf der Windows 7-Maschine erreicht nichts.
Das Seltsame ist, dass Delphi sich bewusst ist, dass der F12 gedrückt wird. Wenn ich ein Programm in einem Debugger auf einem Windows 7-Computer ausführen und F12 drücken, zeigt das Ereignisprotokollfenster in Delphi
anThread-Start: Thread-ID: 4080. Verarbeiten Sie Project73.exe (7108)
Thread-Ende: Thread-ID: 4080. Verarbeiten Sie Project73.exe (7108)
Es ist nur so, dass der Haltepunkt nicht ausgelöst wird und die Anwendung läuft weiter.
Weiß jemand, wie man diese Funktionalität in Windows 7/8 wiederherstellen kann?
Der Debugger sieht, dass ein neuer Thread von Windows gestartet wird, aber er weiß nicht, was dieser Thread ist. In XP läuft dieser Thread in einen int 3
-Breakpoint ( DebugBreak()
), aber unter Vista und Windows 7+ wird der Breakpoint nicht mehr getroffen, selbst wenn Sie den Registrierungsschlüssel setzen.
Es gibt ein Delphi-IDE-Plugin, das den Thread abfängt und die WinAPI-Funktion DebugBreak () aufruft. Ссылка