如何在Windows 7 64位上自动启动调试器以调试32位应用程序?

时间:2011-07-13 10:00:50

标签: debugging windows-7

我正在尝试让Windows在启动应用程序时自动启动调试器(如described in msdn)但是我收到以下错误:

  

Visual Studio即时调试程序未通知应用程序正确启动

快速搜索this person with the same problem,其中的建议是:

  

如果您运行的是Vista或Win7,则需要以管理员身份运行vsjitdebugger,否则您将收到该错误。

我转到了C:\Windows\System32\,在vsjitdebugger.exe的属性的兼容性标签中,我选中了以管理员身份运行此程序复选框。现在我收到以下消息

  

请求的操作需要提升

其次是

  

无法打开此项
  它可能已被移动,重命名或删除。要删除该项吗?

我不确定这是64位操作系统上的32位应用程序是否相关。

2 个答案:

答案 0 :(得分:15)

您应该以管理员身份运行您的应用程序(不要设置vsjitdebugger.exe以管理员身份运行)。然后,系统会提示您输出安全警告,然后会在调试器的正常列表之后进行选择。 在我的情况下,我必须作为管理员程序运行,运行调试程序。

答案 1 :(得分:1)

因此,在寻找解决此问题的方法之后,我找到了答案here。对我来说,问题是调试器注册表配置单元设置不正确。这可能是由于缺少Auto条目,尽管我不是很肯定。在升级到Windows 10之前,我没有这个问题。注册表项必须为:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="1"
"Debugger"="\"C:\\WINDOWS\\system32\\vsjitdebugger.exe\" -p %ld -e %ld"
"UserDebuggerHotKey"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="1"
"Debugger"="\"C:\\WINDOWS\\system32\\vsjitdebugger.exe\" -p %ld -e %ld"
"UserDebuggerHotKey"=dword:00000000

要禁用JIT调试,请使用:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="1"
"Debugger"=-
"UserDebuggerHotKey"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="1"
"Debugger"=-
"UserDebuggerHotKey"=-

仅供参考,我编写了一个简单的cmd脚本以基于每个可执行文件的名称来启用/禁用。为了方便起见,我将其张贴在这里:

@echo off
if %1.==. goto help
if %1==/internal goto apply
if %1==/d (
        %0 /internal %2 -
) else (
        %0 /internal %1 "vsjitdebugger.exe"
)
goto help

:apply
shift
 >%temp%\output.reg     echo Windows Registry Editor Version 5.00
>>%temp%\output.reg     echo+
if %2 == - (
  : Delete registry key
        >>%temp%\output.reg     echo [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%~1]
) else (
  : Add registry key
        >>%temp%\output.reg     echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\%~1]
        >>%temp%\output.reg     echo "debugger"=%2
)
:In case you want to see what it is importing, uncomment the following 3 lines
:echo %temp%\output.reg
:echo --------------------
:type %temp%\output.reg
regedit /s %temp%\output.reg
del %temp%\output.reg
goto :eof

:help
echo %0 [/d] ^<executable.exe^>
echo.
echo Allows you to attach a debugger as soon as the process executes anywhere in the
echo system. If /d switch is provided, then delete the registry key to stop this
echo behaviour.

由于使用了%0,因此您可以随意命名(扩展名为.cmd.bat),它仍然可以正常工作。