2012-12-20 53 views
8

程序在調試器中運行時按下F12應該會中斷執行並打開調試器。這可以在Windows XP(使用D2007和XE2測試)上正常工作,但在Windows 7和8上失敗(也使用D2007和XE2進行測試;在三臺計算機上測試)。F12在Windows 7/8上的Delphi調試器中不起作用

註冊表設置正確(Windows 7)中:

[HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows NT \ CURRENTVERSION \的AeDebug] 「UserDebuggerHotKey」= DWORD:00000000 「調試」= 「\」 C:\ WINDOWS \ SYSTEM32 \ vsjitdebugger.exe \ 「-p%ld個-e%ld個」

[HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows NT \ CURRENTVERSION \的AeDebug \ AutoExclusionList] 「DWM.exe」= DWORD: 00000001

XP安裝還會設置「Auto」=「1」並省略AutoExclusionList,但在Windows 7機器上覆制這些更改不會產生任何結果。

奇怪的是,德爾福似乎意識到被按下的F12。當我在Windows 7的機器,然後按F12調試運行程序,在Delphi的事件日誌窗口顯示

主題開始:線程ID:4080進程Project73.exe(7108)

線程退出:線程ID:4080.過程Project73.exe(7108)

只是沒有觸發斷點,應用程序仍在運行。

有誰知道如何在Windows 7/8中恢復此功能?

+0

回到當天,我們必須安裝一個IDE插件來阻止F12跳過「int 3」。我們使用F12作爲快捷鍵。幸運的是MS在最近版本的Windows中擺脫了「int 3」。 –

回答

11

調試器發現一個新的線程是由Windows啓動的,但它不知道該線程是什麼。在XP中,此線程運行到int 3中斷點(DebugBreak()),但在Vista和Windows 7 +中,即使設置了註冊表項,斷點也不會再受到攻擊。

存在一個Delphi IDE插件,它捕獲線程並調用DebugBreak()WinAPI函數。 http://andy.jgknet.de/blog/ide-tools/unsupported-tools/

+0

謝謝,安迪,你統治! – gabr