Scott on Writing

Musings on technical writing...

Debugging Visualizers in Visual Studio 2005

One of the cool new features of Visual Studio 2005 is the Debugger Visualizer, which provides an alertnate way to view an object in the VS 2005 debugger. What's especially cool about these little gems is that not only does Visual Studio ship with a number of buit-in visualizers for viewing long strings, XML, HTML, images, and so on, but also provides a mechanism for developers to be able to create their own visualizers and plug them into Visual Studio. (See Creating a Debugger Visualizer Using Visual Studio for more information.)

Yesterday, Scott Guthrie posted a blog entry about free debugger visualizers released by various folks in the community, such as an XML visualizer, and a regular expression visualizer. What really caught my eye, though, was K. Scott Allen's control hierarchy visualizer. With this visualizer you can view the control hierarchy rooted at the control whose little magnifying glass icon you click to load the visualizer.

Since Scott kindly gives the source code for his visualizer, I was able to poke around and add a new feature: in addition to seeing the controls in the hierarchy I also added nodes for the controls' properties (and their values). This required just a few lines of code to perform the reflection on each control in the hierarchy. (FYI, it takes a couple seconds to load up on pages with rather large control hierarchies...) Plus I added a little color and icons, just to spruce things up a tad.  :-)

You can download my additions to Scott's visualizer: WebVisualizers.zip. To quote from Scott's blog entry:

To install the a visualizer you have to build the source code. You can build with  Visual Studio, or from the command line msbuild OdeToCode.WebVisualizers.csproj, assuming msbuild.exe is in the path. Copy the .dll from underneath the bin directory into MyDocuments\Visual Studio 2005\Visualizers. VS will automatically load the assembly when debugging, and inspect the metadata inside to know what types to visualize. Note: custom visualizers won't load for a web site running at less than full trust.

posted on Friday, January 13, 2006 12:27 PM

Feedback

# re: Debugging Visualizers in Visual Studio 2005 1/14/2006 7:58 PM Scott Allen

Cool stuff!

# More Debugger Visualizer Goodness 1/17/2006 12:13 PM Scott on Writing

# re: Debugging Visualizers in Visual Studio 2005 1/23/2006 5:21 AM Gregor Suttie

Ok idiots guide required - I have copied the dll to the correct location and ran the application - should I be looking for a particular window or what? I added <trust level="Full" originUrl=""/> to the web.config but lost as to how to use the visualizers.

Many thanks
Greg

# re: Debugging Visualizers in Visual Studio 2005 1/23/2006 10:15 AM Scott Mitchell

Gregor, once you've copied over the DLL set a breakpoint and start debugging. When you hit the breakpoint and enter the debugger, add to the Watch window a control in the control hierarchy (such as Page, or the ID of a TextBox/CheckBox/etc.). Then you should see a magnifying glass icon in the Watch window for that item - click that.

I discuss this technique in more detail in the following article:

Improved Debugging with Visual Studio 2005's Debugger Visualizers
http://aspnet.4guysfromrolla.com/articles/011806-1.aspx

hth

# re: Debugging Visualizers in Visual Studio 2005 4/19/2006 6:40 PM Jason Finch

I've just tried running this, and when I attempt to visualize a control I get this error. Any Clues what this is relating to?


************** Exception Text **************
Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.RemoteObjectSourceException: An entry with the same key already exists. ---> System.ArgumentException: An entry with the same key already exists.
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.SortedList`2.Add(TKey key, TValue value)
at OdeToCode.WebVisualizers.ControlTree.ControlProperties.Add(String propName, Object instance)
at OdeToCode.WebVisualizers.ControlTree.ControlProperties.LoadPropertiesFromInstance(Object instance)
at OdeToCode.WebVisualizers.ControlTree.ControlObjectSource.CopyControl(Control control, ControlProxy controlInfo)
at OdeToCode.WebVisualizers.ControlTree.ControlObjectSource.CopyControl(Control control, ControlProxy controlInfo)
at OdeToCode.WebVisualizers.ControlTree.ControlObjectSource.CopyControl(Control control, ControlProxy controlInfo)
at OdeToCode.WebVisualizers.ControlTree.ControlObjectSource.CopyControl(Control control, ControlProxy controlInfo)
at OdeToCode.WebVisualizers.ControlTree.ControlObjectSource.CopyControl(Control control, ControlProxy controlInfo)
at OdeToCode.WebVisualizers.ControlTree.ControlObjectSource.GetData(Object target, Stream outgoingData)
at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.VisualizerObjectSourceHolder.GetData(Object target, Stream s)
at Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.DebugeeHost.GetInitialData(VisualizerObjectSourceHolder sourceHolder, Object input)
--- End of inner exception stack trace ---

# re: Debugging Visualizers in Visual Studio 2005 4/19/2006 8:46 PM Scott Mitchell

Jason - A stab in the dark, but the error looks like it is occurring b/c the visualizer is trying to insert a duplicate key into a sorted list. I assume the key is the ID of the controls. Do you happen to have multiple controls on the page with the same ID?

Title:  
Name:  
Url:
Protected by Clearscreen.SharpHIPEnter the code you see:
Comments   

Add To Your Reader

My Links

Archives

Post Categories

 

I am a Microsoft MVP for ASP.NET.
I am an ASPInsider.
<May 2008>
SMTWTFS
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

Comment Stats

DayTotal% of Total
Sunday 1866.8%
Monday 37913.9%
Tuesday 45316.7%
Wednesday 50418.5%
Thursday 53519.7%
Friday 49418.2%
Saturday 1666.1%
Total 2717100.0%

Hour1Total% of Total
12:00 AM 652.4%
1:00 AM 682.5%
2:00 AM 622.3%
3:00 AM 742.7%
4:00 AM 572.1%
5:00 AM 1033.8%
6:00 AM 1084.0%
7:00 AM 1585.8%
8:00 AM 1716.3%
9:00 AM 1475.4%
10:00 AM 1716.3%
11:00 AM 1816.7%
12:00 PM 1886.9%
1:00 PM 1696.2%
2:00 PM 1605.9%
3:00 PM 1324.9%
4:00 PM 1073.9%
5:00 PM 923.4%
6:00 PM 913.3%
7:00 PM 963.5%
8:00 PM 833.1%
9:00 PM 782.9%
10:00 PM 792.9%
11:00 PM 772.8%
Total 2717100.0%

Comments by Blog Entry Date/Time

Day Entry MadeAvg.Total
Sunday 5.54144
Monday 5.22339
Tuesday 4.28419
Wednesday 7.67637
Thursday 6.90607
Friday 5.48411
Saturday 5.33160
Total 5.842717

Hour1 Entry MadeAvg.Total
12:00 AM 5.0035
1:00 AM 1.002
5:00 AM 0.000
7:00 AM 7.0035
8:00 AM 5.35107
9:00 AM 6.32278
10:00 AM 6.47246
11:00 AM 4.41181
12:00 PM 6.88330
1:00 PM 3.00111
2:00 PM 5.41222
3:00 PM 8.64285
4:00 PM 4.0589
5:00 PM 5.92154
6:00 PM 4.52113
7:00 PM 9.67174
8:00 PM 9.80147
9:00 PM 5.05111
10:00 PM 5.4265
11:00 PM 4.5732
Total 5.842717

Learn More About Comment Stats
1 - All times GMT -8...


Blog Stats

Favorite Web Sites

My Books

My MSDN Articles