Search code examples
visual-studioadd-inbreakpoints

How to define sets of break points in Visual studio?


I want to define some sets of break points in Visual studio, so that I can toggle among them.

By a set, I mean a collection of break points at certain lines I define. I have many scenarios that I want to toggle among these sets to ease my debugging.

For example:

Set 1: breakpoints at line 1, line 3, line 5, line 7
Set 2: breakpoints at line 2, line 4, line 6, line 8,

Are there any ways to do it in Visual studio (2008 and above are preferred), or are there any add-ins?


Solution

  • This feature is available in Visual Studio 2010 and 2012 in the breakpoints window. http://msdn.microsoft.com/en-us/library/dd293674.aspx

    (c) Visual Studio team (Product Team, Microsoft) Nov 21, 2012

    http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2394909-breakpoint-sets-or-groups-enable-disable-breakp

    Also, here is little macro that implements this functionality in Visual Studio 2008. You may just copy it into any module in macros (Tools > Macros > Macro Explorer > right-click any module > Edit > paste there), and then add it as a command to any menu (via Tools > Customize...)

    Dim savePath = "c:\temp"
    Sub SaveBreakpoints()
        Dim fname As String
        Dim lBreakpointsList As System.Collections.Generic.List(Of Breakpoint)
        Dim fileList = IO.Directory.GetFiles(savePath)
        Dim lFiles = ""
        For Each lFile In fileList
            lFiles = String.Concat(lFiles, IO.Path.GetFileNameWithoutExtension(lFile), vbCrLf)
        Next
        fname = InputBox(String.Concat("Existing sets:", vbCrLf, lFiles, vbCrLf, "Name of new set:"), "Save Breakpoints", "1")
        If fname = "" Then
            Return
        End If
        lBreakpointsList = New System.Collections.Generic.List(Of Breakpoint)
        For Each lBreakpoint As EnvDTE.Breakpoint In DTE.Debugger.Breakpoints
            lBreakpointsList.Add(New Breakpoint(lBreakpoint.File, lBreakpoint.FileLine, lBreakpoint.Condition))
        Next
    
        Using fs As New IO.StreamWriter(String.Concat("c:\temp\", fname, ".txt"))
            For Each lBreakpoint As Breakpoint In lBreakpointsList
                fs.WriteLine(String.Format("{0}   |||   {1}   |||   {2}", lBreakpoint.File, lBreakpoint.Line, lBreakpoint.Condition))
            Next
        End Using
    End Sub
    
    Sub RestoreBreakpoints()
        Dim fname As String
        Dim lBreakpointsList As System.Collections.Generic.List(Of Breakpoint)
        Dim lProperties As String()
        Dim fileList = IO.Directory.GetFiles(savePath)
        Dim lFiles = ""
        For Each lFile In fileList
            lFiles = String.Concat(lFiles, IO.Path.GetFileNameWithoutExtension(lFile), vbCrLf)
        Next
        fname = InputBox(String.Concat("Enter name of set to restore. Existing sets:", vbCrLf, vbCrLf, lFiles), "Restore Breakpoints", "1")
        If fname = "" Then
            Return
        End If
        lBreakpointsList = New Collections.Generic.List(Of Breakpoint)
        Dim lBp As Breakpoint
        Using fs As New IO.StreamReader(String.Concat("c:\temp\", fname, ".txt"))
            While Not fs.EndOfStream
                lProperties = fs.ReadLine().Split(New String() {"   |||   "}, StringSplitOptions.None)
                lBp = New Breakpoint(lProperties(0), lProperties(1), lProperties(2))
                lBreakpointsList.Add(lBp)
            End While
        End Using
        Try
            DTE.ExecuteCommand("Debug.DeleteAllBreakpoints")
        Catch ex As Exception
        End Try
        For Each lBp1 As Breakpoint In lBreakpointsList
            DTE.Debugger.Breakpoints.Add(, lBp1.File, Convert.ToInt32(lBp1.Line), , lBp1.Condition)
        Next
    End Sub
    
    Class Breakpoint
        Public File
        Public Line
        Public Condition
    
        Public Sub New(ByVal pFile, ByVal pLine, ByVal pCondition)
            File = pFile
            Line = pLine
            Condition = pCondition
        End Sub
    End Class