You’re up late one night writing code. Maybe it’s a technology you’re just learning or something you haven’t tried before. You’re getting an exception from deep in the code. You can’t figure out why…the blogs aren’t helping, the newsgroups aren’t helping, the docs aren’t helping. The next day you call product support. Since they don’t have your code in front of them, it’s also hard for them to triangulate what’s going on.
Now, imagine you’ve got source and symbols available. With that, you can enable “Break on Exception” in your debugger, run your scenario, and have the debugger stop exactly where the exception was thrown. The code gets loaded up and you sniff around a bit and realize – duh! – you forgot to set some other piece of state in an earlier call or a parameter. You fix your code and you’re off and running.
Even with one of the decompilers (e.g. Reflector) that you can easily get out there, this can be tricky to solve. With the source it’s much, much easier.
And BIG news is Microsoft making .NET framework sources available to developers. From Shawn Burke’s Blog:
For any of you that have been following my blog, you may remember that I made a splash with a post about possible ways to release Windows Forms source code. This generated a lot of discussion and was picked up by many of the major tech websites out there. That was in February of 2005…
…Today is an exciting day for us here Microsoft and our developers, see ScottGu’s Blog for the big announcement: We will be releasing .NET Framework Source Code as part of the VS 2008 (Orcas) release.
They getting code ready for release, the current launch lineup is (in no particular order):
* Base Class Libraries (mscorlib.dll)
* ASP.NET (System.Web.dll)
* Windows Forms (System.Drawing.DLL & System. Windows.Forms.dll)
* ADO.NET (System.Data.DLL)
* XML (System.Xml.DLL)
* WPF (System.Windows.DLL)
Podcast on Scott Hanselman’s “Hanselminutes” contains a lots more detail. Unfortunately their licensing terms mean that developers only have a read-only view of the source and there wont be any ability to reuse it for Mono etc.