In last year's piece on extensible programming systems, I said that the biggest obstacle higher-level programming tools face is the lack of decent debuggers for them. Anyone who has wrestled with a broken thousand-line Makefile, or a complex Apache or Tomcat configuration, knows the problem: you write at this level, but when it doesn't behave the way you want it to, you have to reason backward from that level to figure out what to change.
This posting in ScottGu's blog pulls together a few visual debugging aids developed for .NET. Taken together, they show how much more we could be doing to make developers (who spend more time debugging than writing new code) more productive. What we really need, however, is languages and platforms designed with extensible debugging in mind. Ryder et al's paper The Impact of Software Engineering Research on Modern Programming Language Design (ACM Trans. on Software Engineering and Methodology, Oct 2005) shows that language designers will pay attention to developers' needs, provided those needs are organized, categorized, given some theoretical underpinnings, and clearly explained. Andreas Zeller's book Why Programs Fail is a start; here's hoping others will pick up the torch.