Macros for debugging
29/6/2004 external link
I'm sitting here writing some macros to help test a new feature I've implemented in the debugger. Doing so is always an interesting experience. There is quite a lot of functionality available via automation, but it isn't always straightforward how to access it. It makes me wonder how many people use macros and automation, especially with the debugger.
Many things are very easy. To load the solution, I just call:
DTE.Solution.Open(“MyApp.sln”)
To start debugging, it just takes:
DTE.Debugger.Go()
But then to figure out how to set the caret in the document is not so intuitive.
It's pretty easy to figure out that DTE.ActiveDocument.Selection gives the selection, but statement completion doesn't provide any methods or properties to set the selection. I finally figured out that you have to assign the selection to a TextSelection object. This has a MoveToPoint method, which takes a TextPoint. However, I can't just create a “New TextPoint()”. It took some more time to realize that you can't create these from scratch, but have to create them from an existing EditPoint. Here's my final solution:
Private Sub SetCaretPosition(ByVal Line As Integer, ByVal Column As Integer)
Try
If Not DTE.ActiveDocument Is Nothing Then
Dim selection As TextSelection = DTE.ActiveDocument.Selection
Dim point As EnvDTE.EditPoint = selection.ActivePoint.CreateEditPoint()
point.MoveToLineAndOffset(Line, Column)
selection.MoveToPoint(point)
End If
Catch ex As System.Exception
TestOutput("Unable to set caret position. " + ex.ToString)
End Try
End Sub
Now after moving the caret, I can change the current statement by calling DTE.ExecuteStatement(“Debug.SetNextStatement“). Mission accomplished.
Let me introduce myself
11/5/2004 external link
My name is Adam Krantz. I am a developer at Microsoft on the Visual Studio debugger team. My focus is on the user interface, and how to make the various debugger features work well for all the different languages, scenarios, and types of users. I'm looking forward to discussing these features, providing insights into how and why things work the way they do, and getting feedback from users about what they want from their debugger.


