【问题标题】:F12 not working in Delphi debugger on Windows 7/8F12 在 Windows 7/8 上的 Delphi 调试器中不起作用
【发布时间】:2012-12-07 20:55:28
【问题描述】:

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

注册表设置正确(Windows 7):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug] "UserDebuggerHotKey"=dword:00000000 "调试器"="\"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 中恢复此功能吗?

【问题讨论】:

  • 过去我们不得不安装一个 IDE 插件来阻止 F12 绊倒int 3。我们使用 F12 作为快捷键。值得庆幸的是,MS 在最新版本的 Windows 中去掉了int 3

标签: delphi debugging windows-7


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多