If you’ve looked at the MDbg sources, you’ll notice it looks a lot like a V1.1 app. There are few to no V2 (Whidbey) concepts in there: few anonymous delegates, very little (if any?) generics, no ‘yield’ keyword. Since MDbg shipped in V2, why didn’t we use the greatest stuff from V2?
1. Bootstrapping: We started writing Mdbg early in V2; when V2 still looked a lot like V1. Generics weren’t even available yet. This bootstrapping reason is also why V1.0 Cordbg was unmanaged instead of being managed with COM-interop. When we started writing Cordbg in V1.0, COM-interop wasn’t ready yet.
2. In case we ever wanted to run Mdbg on V1.1: New V2 features like generics don’t run on the V1 CLR; and so if we wanted to leave the door open for backporting Mdbg to V1.1, then we needed to only use the V1.1 feature set in V2. There are other problems for making a managed debugger in V1.1, so it’s unlikely we’ll ever actually do this. And the longer that V2 is out, the less attractive porting MDbg to V1 becomes.