The Visual Studio C++ Debugger since VC6.0 have had this feature called RPC debugging. It was turned off by default and is present somewhere in Tools | Options [|Debugger]
What does it do? Well, COM has provided hooks for debuggers that enable them to step into and out of COM calls that go across threads when the apartment rules require it (e.g STA calling into a MTA component).
With RPC debugging turned on, when you do a step in at such a call site, you will automatically land at the callee on a different thread (assuming the COM rules necessitated a cross thread marshaled call), you can also step back out of the callee and back into the caller.
Caveats:
1. You have to be an administrator for this to work. COM requires this.
2. If you have a proxy DLL then we require that it's compiled with source level debugging information off (or compile with no debug info), This is because if you do have source and step in, we assume you want to stop in the proxy code since it has source line information.
3. AFAIK, windbg does not support this.
In Whidbey we extended this feature to support some mixed debugging debugging scenarios, meaning you can do cross thread stepping from a managed to native call site across different threads and vice versa.
This posting is provided "AS IS" with no warranties, and confers no rights.