How to launch debugger automatically to debug 32 bit applications on Windows 7 64 bit?
I'm trying to have Windows automatically start the debugger when an application is launched (as described in msdn) however I'm getting the following error:
The Visual Studio Just-In-Time Debugger was not notified that the application correctly started
A quick search found this person with the same problem where the suggestion was:
If you are running Vista or Win7 you need to run vsjitdebugger as an administrator or you will get that error.
I went to C:\Windows\System32\
and in the compatibility tab of vsjitdebugger.exe
's properties I checked the Run this program as an administrator check box. Now I开发者_开发知识库'm getting the following message
The requested operation requires elevation
Followed by
Can't open this item
It might have been moved, renamed, or deleted. Do you want to remove this item?
I'm not sure if the fact that this is a 32 bit application on a 64 bit OS is relevant.
You should run your application as an administrator (don't setup vsjitdebugger.exe to run as administrator). Then you will be prompted with the security warning and after that normal list with debuggers to choose from. In my case I had to run as an administrator program which runs debugged program.
So after looking around for the solution to this problem I found the answer here. The issue for me was that the debugger registry hives weren't set properly. This is prolly due to missing the Auto
entry, though I'm not positive. I didn't have this issue before I upgraded to Windows 10. The registry entries need to be:
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
To disable JIT debugging use:
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"=-
Just a FYI, I wrote a simple cmd script to enable/disable on a per executable name basis. I'm posting it here for you convenience:
@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.
Because of the use of %0
, you can name it whatever you want (with an .cmd
or .bat
extension) and it will still work as expected.
精彩评论