8

当程序在调试器中运行时按 F12 应该会中断执行并打开调试器。这在 Windows XP(用 D2007 和 XE2 测试)上正常工作,但在 Windows 7 和 8 上失败(也用 D2007 和 XE2 测试;在三台计算机上测试)。

注册表设置正确(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\CurrentVersion\AeDebug\AutoExclusionList] "DWM.exe"=dword:00000001

XP 安装还设置了“Auto”=“1”并省略了 AutoExclusionList,但在 Windows 7 机器上复制这些更改没有任何效果。

奇怪的是,Delphi 似乎意识到 F12 被按下了。当我在 Windows 7 机器上的调试器中运行程序并按 F12 时,Delphi 中的事件日志窗口显示

线程开始:线程 ID:4080。处理 Project73.exe (7108)

线程退出:线程 ID:4080。处理 Project73.exe (7108)

只是没有触发断点并且应用程序继续运行。

有人知道如何在 Windows 7/8 中恢复此功能吗?

4

1 回答 1

11

调试器看到 Windows 启动了一个新线程,但它不知道该线程是什么。在 XP 中,该线程会遇到int 3断点 ( DebugBreak()),但在 Vista 和 Windows 7+ 下,即使您设置了注册表项,也不会再遇到断点。

有一个 Delphi IDE 插件可以捕获线程并调用 DebugBreak() WinAPI 函数。 http://andy.jgknet.de/blog/ide-tools/unsupported-tools/

于 2012-12-20T10:54:11.983 回答