Monday 9 April 2012

Microsoft needs to adopt GIT/DVCS for its code downloads (Mdbg upgrade)

One of the hidden gems of the O2 Platform is the O2 Debugger Mdbg (created years ago) which is a very powerful GUI on top of the Microsoft Managed .NET Debugger (Mdbg) Sample application.

The version I used was the one that can be downloaded from the CLR Managed Debugger (mdbg) Sample (2006) and includes the source code of a managed version of a CLR Debugger.

There really powerful features on this O2 module and if you struggling to debug an .NET app and need to gain programatically control over CLR/IIS/ASP.Net, this is a great tool (I used it to find some really juicy vulnerabilities and even to patch/fix them dynamically (i.e. real-time))

As part of my upgrade of the O2 Platform to v4.0 of the .NET Framework I recompiled ok the O2 Debugger Mdbg under 4.0 but at the moment it only works for 2.0 CLR assemblies.

Now the new version of CLR Managed Debugger (mdbg) Sample 4.0 works with the 4.0 CLR, so all we need is to upgrade the O2 Debugger Mdbg right?

Well, the problem is that I made a number of changes to the original mdbg sample, namely to introduce a number of hooks back to O2 and to make it work ok in O2's multi-thread GUI.

So how to I merge this updated version of Mdbg, when I don't have a common Git History between its two versions? (the one I used originally and the new one)

Microsoft would make this process SO MUCH easier if they distributed their code samples using Git (or other DVCS) .

So here is where things are (April 2012):

  • I downloaded the new version of  CLR Managed Debugger (mdbg) Sample 4.0
  • I copied those files into the existing O2 Debugger Mdbg folder (this was not a merge, it was a copy with overwrite (which meant that I lost all changes made in the files overwritten)
  • tried to compile (didn't work)
  • created a new branch locally (and on GitHub) to hold the overwritten files called Merge_With_v4
  • wrote this blog post :)
I don't have time at the moment to debug this, but if you want to help, then see if you can get it to work :)