F12在Windows 7/8上的Delphi调试器中不起作用

时间:2012-12-20 10:48:35

标签: delphi debugging windows-7

在程序在调试器中运行时按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计算机上复制这些更改不会实现任何效果。

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

  

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

     

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

只是断点未被触发且应用程序继续运行。

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

1 个答案:

答案 0 :(得分:11)

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

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