You were wondering if you were ever going to see another entry about the book writing process, right? It’s been a wild summer. Far too many things to do and not enough time to do them. I vow from here on out not to use sleeping or eating as a crutch. It’ll be all book and work from now until the end of time. Of course, my wife might have a thing or two to say about that.
The big news is that I finally got the first partial chapter out to reviewers. It’s Chapter 6, which is all about WinDBG, SOS, and ADPlus. I say partial chapter because I finished the WinDBG and SOS portions. It was a complete grind. The partial chapter is 175 pages! To put that in perspective the WinDBG and SOS chapter in the last edition was a measly 97 pages. I was only able to reuse about five pages from the last edition in the 175 so it’s a squeaky clean new rewrite. Of course, the ADPlus part will be another 50-75 pages, which will effectively make Chapter 6 a book all on it’s own.
I like how the discussion on SOS came out, I really tried to show how to use the various commands in scenarios you’d encounter during your day to day debugging. The chapter is in the hands of the Review Crew so I’m sure I’ll be finding out soon if I achieved my goal or not. My goal for the ADPlus section is to build up some examples of common problems you’ll encounter and show how you’d apply SOS to solving them. You know, the small things like OutOfMemoryExceptions and unexplained application disappearance. The kind of thing that keeps you at work instead of having a life.
One of the the greatest commands in the .NET 2.0 version of SOS is the !bpmd command. In .NET 1.1, to set a breakpoint on a method was a very messy affair that required several steps depending on if the method was jitted or not jitted. Now with the !bpmd command, all you have to do is issue the !bpmd <module> <method>, and it takes care of all the dirty work for you. Another command that’s a big help is the !stoponexception. As you can tell from the name, it’ll stop whenever the type of exception is thrown or unhandled that you want to break on. Prior versions of .NET relied on a bizarre scheme that didn’t always work. Now it does. Of course, these new commands still don’t salve the wounds of losing functionality from .NET 1.1 that I talked about in my last book blog entry.
The last two months haven’t been all book, which is part of the problem. I’ve got bills to pay so there were some trips involved. I’ve been to Redmond, where I finally got to meet two people I’ve respected for a long time, Peli de Halleux and Peter Provost. I visited the Microsoft Fargo, ND offices where they make Microsoft Business Solutions and the Microsoft Business Frameworks. Those of you that know me know I love to eat well and Fargo has two great places that I’d highly recommend, Monte’s Downtown and HoDo’s at Hotel Donaldson. There was also another trip to Redmond for an exciting project we’ve got going on with Microsoft. More details will be announced soon. Oh yeah, I also went to the family reunion in July. I almost don’t feel like I was home much. Maybe that’s why I’ve flown 120K miles this year so far.
I also did some coding related to the book which will appear in an upcoming MSDN Magazine Bugslayer column. I had it up to my eyeballs with WinDBG and SOS so it was a great change of pace. The one thing I’ve missed in the .NET world was the SUPERASSERT I did for native code. After really scratching my head, I figured out how to walk the stack of other threads in a .NET application. My solution works, but does not break any .NET security. With that tantalizing hint I’ll let you wait until the column comes out in the magazine.
My plan now is to give the SOS stuff a rest because I’m tired of it and move on to some of the earlier chapters. That way I can get into coding more, which is the fun stuff. My automated build is all set and I’ve written MSBUILD rules that pulls the code, checks out the version number files, updates them and checks them back in and builds everything through the installation. I just need to add more stuff to the build!
The Latest I’m Totally Loving about Visual Studio .NET 2005/.NET 2.0
- The Code Definition window is the thing for better productivity. I’m amazed at how much less I’m looking at the help for properties or methods.
- I’m also addicted to the DebuggerDisplayAttribute class. It needs to be on every class that doesn’t override ToString. It’s so important I’ll write an FxCop rule that’ll check if it’s missing on your public classes.
The Latest Problems I’m Having with Visual Studio .NET 2005/WinDBG
- The CTRL+SHIFT+V cycle paste looks to be broken in Beta 2.
- WinDBG 18.104.22.168 had a problem where the symbol engine doesn’t like the stripped PDB files for .NET 2.0 native images produced by Microsoft. It goes into a loooooong loop (on the order of 20-30 minutes) walking the call stack. There’s a WinDBG 22.214.171.124 posted, but the version number still says 126.96.36.199 and I’m still seeing the problem.
- WinDBG and SOS take way too much typing. My carpel tunnel syndrome is already acting up and I’m typing with a wrist brace. That’s only supposed to happen by the end of the book, not at the beginning!
What’s up Next?
- On to the early chapters!
- Spelunking the source server
- Symbol management utilities