Saturday, February 18, 2006

Managed Spy, .Net's Spy++

Managed Spy: Deliver The Power Of Spy++ To Windows Forms With Our New Tool -- MSDN Magazine, April 2006

"…

Figure 1 shows a dialog box with a few nested controls. This app has a bug in the top-right textbox, though for the purposes of this example it doesn't really matter what the bug is. It would be useful to identify not only which member is the red textbox, but also the parent hierarchy and layout of related controls.

figure 1 problem dialog box
Figure 1 Problem Dialog Box

ManagedSpy can help with this scenario and others. It displays a treeview of controls in your .NET-based client application. You can select any control and get or set any property on it. You can also log a filtered set of events that the control raises. While great for debugging, this can also help in compatibility testing of your control. You can use real applications and log events to ensure that event ordering is preserved for the next version of your control.

When you first run ManagedSpy, it displays a list of processes in a treeview in the left side of the window and a PropertyGrid on the right side. You can expand the process to see top-level windows in that process.

When you select a control, the PropertyGrid shows properties on that control. You can examine or change property values here. You should note that custom types are supported as long as they are binary serializable (see Basic Serialization).

The toolbar contains commands to select which events get logged to the event pane, to refresh the TreeView when new windows have been created, to start or stop logging of events to the event pane, and to clear the event pane.

For the dialog box shown in Figure 1, ManagedSpy displays the information shown in Figure 2. According to ManagedSpy, textBox1 is parented to a SplitContainer (SplitContainer2), which in turn is parented to a TableLayoutPanel (tableLayoutPanel1). The parent of the TableLayoutPanel is a TabControl, which is in yet another SplitContainer. Note also that ManagedSpy tells me that the BackColor is Red.

figure 2 debugging a control in managedspy
Figure 2 Debugging a Control in ManagedSpy

Clicking on the Events tab will display events such as MouseMove on the currently selected control in the treeview. To begin logging events, click the Start Logging button. The output will appear as shown in Figure 3.

figure 3 logging events
Figure 3 Logging Events

… "

Spy++ has helped me a number of times… It’s cool to see this managed version (with C#, C++ source).

(via Simon's Mu-zings – Three new MSDN Magazine Windows Forms articles from the dev team)

2 comments:

Mike said...

love ManagedSpy!! I managed to get it to work on my 64-bit machine.

Occassionally, it will show numbers instead of object names in the TreeView. (I can send you a pic) Any idea how to get around that issue?

Greg said...

Sorry, no I don't...