Wanted: Debugger User Interface Feedback
In the past, we have relied on internal dogfooding, external alphas and betas, and usability studies of work-in-progress to get feedback that can be used to improve the feature before being released to the public. We are still doing that more than ever. However, blogging has opened up a new channel of feedback that I'd like to take advantage of.
As you may or may not know, I am a developer for the Visual Studio debugger, with a strong emphasis on the user-interface the debugger presents. That being the case, I am keenly interested in hearing about what you love about the debugger, what you hate about it, and/or ways you think it can be improved or changed to better meet your debugging needs. As posts are made, I will not only note the feedback and try to address it in future versions, but I (and others who read this) will be sure to post guidance and/or tips to help address your needs with existing versions of the product.
To get you started thinking about it, I'll pose a few questions:
- Which form of variable inspection do you find yourself making the most use of? Datatips? the Watch Window(s), the Autos Window?, the Locals Window? Why?
- How do you set and unset a breakpoint?
- What feature are we completely missing?
And here are a few usability tips:
- Did you know you can edit many values in the watch, locals, or autos window? Just click on the item, then click on it's value. If the value can be edited, it will become editable.
- Did you know you can drag a deeply nested watch, local or autos, item to a top level of the watch item?
- Did you know you can view more than the first item in a C++ array, by appending your watch item with “,#“ where the number is replaced by the number of items you want to view? For example, if you have a pointer to an array of ints, called “pArray“, you can view the first 10 items with “pArray,10“
While your at it, also be sure to check out some of the other blogs here that address our debugger, including: https://blogs.msdn.com/stevejs and https://blogs.msdn.com/greggm.
Comments
- Anonymous
February 14, 2004
A couple of improvements that I would really love to see are:
1) Being able to look up symbols from the debugging information for a module (similar to what is possible in WinDbg e.g. 'x mymodule!SymbolName) and set breakpoints on symbols.
2) Being able to debug child processes as well as just the process launched
Thanks for a great debugging environment! - Anonymous
February 14, 2004
The comment has been removed - Anonymous
February 14, 2004
Jim,
My top three would be:
1. A way to decide whether or not to break on exceptions based on their context (exception type + call stack). I have an add-in that does this, albeit in an unperfect way due to limitations of the automation model. Ping me via e-mail if you want to see it.
2. Ability to find out a managed objects ID. Right now I have a tough time deciding whether two objects are the same if they are referenced in different stack frames.
3. A graphical Watch window for visualizing data structures.
Dejan - Anonymous
February 14, 2004
The separate debugger that pops up when using Managed C++ really annoys me. Why can't it integrate into the IDE?
My other wanted features have already been covered by the above posters. - Anonymous
February 15, 2004
Watch window needs to be able to show intellisense for type members.
If I type someObj. it should popup a list of all available members I can watch. - Anonymous
February 15, 2004
I would like the breakpoint groups as well.
There are a few things that annoy me about the debugger:
- Conditional breakpoints never seem to work. Maybe I'm not understanding something about them, but they never seem to work for me.
- Trying to index things rarely works. You can't use constants to index a lot of things (I have found this with DataRows), which often means you can't copy the code out of the code window and just dump it in the watch window. The error you get "xyz doesn't have an indexer" is wrong (because it does), and therefore doesn't help you to understand what you're doing incorrectly. - Anonymous
February 16, 2004
I would second the request for a graphical view of the data. I think this could be a fascinating tool, and would really help developers understand their programs. My vision for it is as an object map on top of physical or logical memory, with the ability to zoom in on more detail (obviously, I have not given this the time to come up with a realistic vision), but something that graphically demonstrated the memory and objects, as well as the ability to view transitions and to drill down to the appropriate level or view. - Anonymous
February 16, 2004
Graphica view of the data in the debugger?
So what do you want, dancing girls maybe a disco globe? - Anonymous
February 18, 2004
Oooh. A disco globe? I want one. - Anonymous
February 18, 2004
Please provide better support for conditional breakpoints. Context menu's over items in the editor with "Break when this reaches a value..." , and settable conditional operations from the watch windows. Like an icon or context for a cell in a watch window, to be able to do: "when the contents of this hits 10, break".
I can't believe conditional breakpoints dont work, but like a previous comment brought up, they're tricky to make work, but I suspect very handy. Mine never seem to work either. - Anonymous
February 18, 2004
How about making debugging ASP.Net applications actually WORK without having to go through a day long ordeal EVERY time you build a machine? - Anonymous
February 18, 2004
Hmm. This may be a bit much of a request, but how about being able to view the IL and step through that?
From a user-interface perspective, I'd like to be able to "disable" watch items. Putting certain items on the watch list can cause severe slowdown. What would be neat is the ability to check/uncheck items so that the debugger doesn't evaluate them unless you want to. Currently I do this with Watch1-3, but when I'm in lots of different code, I'll use those to organize by module instead. - Anonymous
February 18, 2004
Drill into ado.net objects like we could do in VB6 with recordsets, etc. please please please please :-)Hmm, that's not really a UI thing though is it... - Anonymous
February 18, 2004
One thing I want to is to define macros in watch windows. For example:
Name Value
----------------------
$myexpr 10
szArr[$(myexpr)] <<value of szArr[10]
>>
$complexexpr ((cast2*)((cast1*) pLpVoid)+)
$(complexexpr),$(myexpr) <<array >>
So if it is $name then it defines a macro, if $(name), means to evaluate a macro. The macros should be able to build on top of other macros. Very useful when have structures, classes or arrays that are complicated. Put this definitely have more benefits beyond that. - Anonymous
February 19, 2004
The comment has been removed - Anonymous
February 19, 2004
The comment has been removed - Anonymous
February 19, 2004
I agree with a post above. The Watch window should be able to use Intellisense.
It's annoying to have to copy an item from the watch into the text editor to use Intellisense and see what member I want to add to the watch.
Thanks. - Anonymous
February 19, 2004
Just wanted to post a short note to let you know that I am indeed still here and totally psyched about the great feedback I'm getting! Some of the ideas I've heard countless times, others are brand new ideas I hadn't heard before.
Once I get done with a little work item here and fix a few bugs, I will respond with much more detail! - Anonymous
February 21, 2004
Let's imagine that my code faults on System.Data.OleDb.OleDbException; And I have a global catch clause to make the exception look pretty before showing it to the user.
So I now know which type of exception it was, but not exactly where it came from.
I set OleDbException to "break into the debugger" and live happily ever after. Or not, since reopening the exceptions window will give me no indication that any exception is handled in the non-default way, the "clear all" button seems to have no effect, and I'm left to drill down the whole list looking for exceptions I've set to "break into the debugger".
Whatever new GUI you introduce, it should somehow show all the changes the user made to default settings... - Anonymous
February 24, 2004
Break on Watch value changes
Another thing that's missing for me (and others) is the ability to break in code when a value changes, but not by creating a breakpoint.
This same functionality exists in VB6:
Create a watch, and enter "Edit watch properties" dialog.
There you can select the scope of the watch and can ask to break when value is true or changes.
This does not exist in VS.Net (or am I missing something?) - Anonymous
February 25, 2004
I have to agree with zz's comments about groups of breakpoints/watches/etc.
This could be generalized so that I could have common "profiles" that enable certain breakpoints, exceptions, watches, etc. I could save a profile to either my user account, or to a project (similar to how you have global include directories and project-level include directories).
Finally, I would be able to have a dockable window or drop-down toolbar button where I can see all profiles that are currently defined, and check and un-check them (some form of import/export would be good too). This way I could define a profile, say, for "low-level debugging" where I break on first-chance AV's, show the registers window, and show disassembly.
I'd also like to cast my vote for IL debugging (realize it'd be hard), and graphical visualizers for object graphs.
To address your initial questions:
I mostly use datatips if I'm stopped somewhere trying to figure out what happened, and I use watches if I'm stepping though code. A nifty feature would be to grab hold of a datatip and drop it in the watch window.
I set/unset breakpoints with either F9 or by clicking in the margin, depending on whether my hands are on the keyboard or the mouse.
One feature I would love (not directly related to debugging) is the ability to click in a token in the source view and then perform some keyboard combo or mouse gesture and have it automatically bold other occurrences of that keyword in view for some configured duration. A lot of times I'll be looking at a function's parameters and have to carefully scan the code to see where they are used. The auto-bolding that happens when you close parenthesis or curly's would be an excellent visual cue. I'm not sure what the average opinion of mouse gestures is, but I do think that using the context menu for this would be too disruptive. - Anonymous
March 09, 2004
New features in Whidbey C++, mentions briefly some things on the wish list like collection visualization in debugging:
<br>
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032247082&Culture=en-US - Anonymous
March 22, 2004
Graphical view of debugger?
Does this mean something like:
http://www.gnu.org/software/ddd/all.jpg
Some people 'think in pictures' so that might help there ... - Anonymous
April 06, 2004
The exceptions dialog should have an option to list exceptions by inheritance, not namespace. If I have a catch block that catches 'ArgumentException', I want to be able to change the behavior for that type and all types that derive from it (regardless of which namespace they're in). - Anonymous
April 06, 2004
The comment has been removed - Anonymous
April 16, 2004
I would very much like the ability (as I had in VC6) to set the font in the watch window without changing the font in every other tool window! It is very distracting to me to have identifiers in a variable width font in one window and a fixed one in my code window.
Several other mentioned the need for a better way to view a large formated string such as the value of the OuterXml propertiy of a XmlDocument. - Anonymous
April 16, 2004
Hey everyone! Sorry I've been lacking in my blogging, but we're in the process of trying to get a beta in order and that meant some heads down getting bugs fixed, work finished, etc.
Thanks for all the great feedback about the debugger UI. Many of the features you requested will be showing up at at a beta near you in the coming months. Others will either be considered for a future beta, or release.
What I've been planning on doing is collecting and categorizing and even submitting new UI ideas based on the above feedback to all of you, but getting a good chunk of time to do that is proving to be difficult.
So, I'm going to try and take more frequent little steps instead. I'm hoping that over time these little steps will self-organize into larger concepts and topics.
With that, please be on the lookout for a couple new articles asking more questions or otherwise addressing many of the above posts.