Visual Studio 2005 debugger component cpde.dll (debug engine) hosts components which implement ICorDebug, the managed debugging API.
(For details refer ICorDebug blogs at http://blogs.msdn.com/jmstall).

This API is implemented in mscordbi.dll  for Managed Debugging of desktop applications in Visual Studio.

Before we get into VSD specific details let me briefly summarize the essence of managed debugging.

Managed debugging is implemented entirely by the run time. There is a special thread (called the Helper thread) in every managed process that services requests from the managed debugging API (ICorDebug interfaces). Managed debugging is an In-Process model. The helper thread must be present and running in the debuggee’s process in order for managed-debugging to function.

Having said that, the key things that differentiate Visual Studio for Devices (VSD) Managed Debugger with the Desktop debugger is the following two facts
- VSD Managed Debugging is always remote debugging. That is the debugee process is not running on the desktop where the debugger process (devenv) is running. The debuggee process runs either on the emulator or on the device.
- VSD Managed Debugging invloves .NET Compact Framework runtime whereas for the desktop world it is CLR. Hence we cannot equate remote debugging of a desktop application with that of VSD Managed Debugging even at 10000 feet height considering that managed debugging follows a in-proc model.

The actual implementation of the VSD managed debugging API sits in icordbg.dll. As mentioned above, icordbg.dll interacts directly with the .NET CF running process which spawns and runs the debuggee helper thread.

That much for the brief introduction. Stay tuned for further details on end to end story of F5 in Managed Debugging.