I was wondering about how to better debug and profile my games. I use Visual Studio with its debugger and profiler, but there are cases where they are difficult or impractical to use which is why I'm adding various tools to my "engine". A typical example is the debug console which can display explicit Log(message) calls, and their callstacks when messages are clicked. My console also allows arbitrary C# and IronPython statements which is great for debugging and testing. Included in this I also support a command which displays the result of an arbitrary expression on screen. Great for debugging mouse movements, picking etc.
My "engine" also has basic support for profiling subsystems by using something like BeginProfile/EndProfile which creates a treeview-like view when nested. It displays something like the minimum, maximum and average timings over N frames. It can be pretty helpful, but requires alot of manual instrumentation which I'm not entirely happy with. How can I improve this to make it more useful while less intrusive to the code?
What other debug and/or performance tools have you found to improve your development experiences?