我正在尝试让Windows在启动应用程序时自动启动调试器(如described in msdn)但是我收到以下错误:
Visual Studio即时调试程序未通知应用程序正确启动
快速搜索this person with the same problem,其中的建议是:
如果您运行的是Vista或Win7,则需要以管理员身份运行vsjitdebugger,否则您将收到该错误。
我转到了C:\Windows\System32\
,在vsjitdebugger.exe
的属性的兼容性标签中,我选中了以管理员身份运行此程序复选框。现在我收到以下消息
请求的操作需要提升
其次是
无法打开此项
它可能已被移动,重命名或删除。要删除该项吗?
我不确定这是64位操作系统上的32位应用程序是否相关。
答案 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
),它仍然可以正常工作。