Ctrl+F5 will launch your application outside of the debugger. This is like
launching your app from the "start | run" menu, except VS becomes the parent
process instead of explorer. Ctrl+F5 is purely convenience functionality.
running under a debugger shouldn't change the app's behavior. An app may do
something evil, like
detect if a debugger is attached to itself, and use that to do different
Under the covers, they both translate to calls to CreateProcess. The
1) what version of CreateProcess do you call?
kernel32!CreateProcess is the OS API to create a process. ICorDebug::CreateProcess
has the same signature as kernel32's, but the ICorDebug version will launch the
program as a managed debuggee.
2) what flags do you pass? CreateProcess takes a set of
flags. If you pass (DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS) to the flags,
then the child process will be a native.
If you enable both managed + native debugging, then you've enabled
Here's a matrix: