Debugging a Process Launch

While this is hardly a hidden setting, I found myself spending too much time to find it twice already – the msdn page describing it appears low on search results, since it uses very different terminology.  So,  if only for self reference, there goes:

You can easily debug executables without source (or even symbols) in VS – just attach to the running process. You can then step through instructions and watch memory and registers as you would in regular debugging.  However, I had some process-launch issues, with a process I didn’t have the source to – so I had no running process to attach to..

Apparently you cannot launch a source-less process from within VS. The way to go is to modify a registry setting that would cause windows to launch a chosen debugger (VS for me) whenever you try and execute your destination process.

The registry key is –

HKLM\Software\Microsoft\Windows NT\currentversion\image file execution options

Add a subkey with the name of the executable to debug (e.g., notepad.exe), and give it a string value with name ‘Debugger’ and either of the values –

(1) ‘vsjitdebugger.exe’ if you want the JIT debugger-selection dialog,

(2) ‘devenv /debugexe’ if you know you’d want a new VS instance,

(3) Other debuggers of your choice – windbg, ntsd, kd, etc.   Personally, I’ve yet to encounter a situation where they’re necessary, but these do exist.

The ‘image file execution options’ key contains some more goodies, that Junfeng Zhang took the time to look up and semi-document.

Edit (1) : Gregg Miskelly elaborates on Junfengs post, then updates to VS2008.  You’ll find tons of other posts googling for IFEO, but I consider these to be the most informed.

Edit (2):  Turns out there’s a much, much easier and less destructive way – vsjitdebugger.exe can accept a process as a command line argument!

It sits at the WINDOWS/system32 folder, and running ‘vsjitdebugger.exe notepad.exe’ will do the trick.

You can create a shortcut to vsjitdebugger with your executable as an argument for extra-convenience.

Type ‘vsjitdebugger.exe -?’ for a bit more stuff (executable arguments and attaching to a running process).

This entry was posted in Debugging, Visual Studio. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s