I’ve been doing a fair bit of low-level debugging at work lately. It’s never been my favourite activity. It would be nice if software just worked. But of course, it doesn’t. Computers do what they’re told – not necessarily what you want them to. Something gets lost on the way. But that’s not the topic for this rant. I’m talking about the debugging utilities themselves.
Debuggers are a special breed of software. They should ideally allow you to observe the target application in its natural environment without interfering with its operation. Kind of like hiding a camera in the amazon rainforest to study the behaviour of three-toed sloths. You don’t want problems that mysteriously disappear, or new problems that materialise, when the debugger’s attached.
It seems that another requirement of low-level debuggers is that they should have confusing user interfaces. Take a look at TMON (screenshot to the right). This would have been some time in the mid to late ’80s on a compact Mac.
In order to be able to run when the system is unstable, it isn’t using system drawing APIs, which explains the not-quite-standard UI. It’s showing the CPU registers, six lines of disassembly from the program counter and the top 48 bytes of the stack (there are 22 bytes of local variables, the frame link $2CE070, the return address $070056, and possibly some arguments there), and the command window.
There was a lot you could do with TMON, assuming you know how. Much to my surprise, I still remember how to dissect stack frames. But as should be obvious from the first glance is that it just looks like a whole lot of numbers. The learning curve is horribly steep, assuming you don’t get scared away immediately.
You’d think that in twenty years we could have improved on that. Look at the latest WinDbg on the right. You can see the call stack, the local variables, and the command window. OK, not having to dissect the stack by hand is helpful, but not much else has improved.
It’s still using almost-standard UI. It does a horrible job of trying to arrange windows. Like TMON, there’s a lot you can do with it, but only when you know how. The menus and toolbars would seem to be designed to confuse users.
In another twenty years, will it be any different? Probably not. I guess debugging is just one of the l33t 5k1llz needed to be a developer. If it was all too simple, it would be too easy for non-geeks to becom software engineers ;-P