¿Cómo agrego puntos de interrupción de depuración a las líneas que se muestran en la ventana "Buscar resultados" en Visual Studio?

StackOverflow https://stackoverflow.com/questions/73063

Pregunta

En Visual Studio 2005-2015 es posible encontrar todas las líneas que contienen determinadas referencias y mostrarlas en una ventana "Buscar resultados".

Ahora que se muestran estas líneas de resultados, ¿existe algún método abreviado de teclado que permita agregar puntos de interrupción de depuración a todas ellas?

¿Fue útil?

Solución

Esta respuesta no funciona para Visual Studio 2015 o posterior.Se puede encontrar una respuesta más reciente. aquí.

Puede hacer esto con bastante facilidad con una macro de Visual Studio.Dentro de Visual Studio, presione Alt-F11 para abrir Macro IDE y agregue un nuevo módulo haciendo clic derecho en MyMacros y seleccionando Agregar|Agregar módulo...

Pegue lo siguiente en el editor de código fuente:

Imports System
Imports System.IO
Imports System.Text.RegularExpressions
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module CustomMacros
    Sub BreakpointFindResults()
        Dim findResultsWindow As Window = DTE.Windows.Item(Constants.vsWindowKindFindResults1)

        Dim selection As TextSelection
        selection = findResultsWindow.Selection
        selection.SelectAll()

        Dim findResultsReader As New StringReader(selection.Text)
        Dim findResult As String = findResultsReader.ReadLine()

        Dim findResultRegex As New Regex("(?<Path>.*?)\((?<LineNumber>\d+)\):")

        While Not findResult Is Nothing
            Dim findResultMatch As Match = findResultRegex.Match(findResult)

            If findResultMatch.Success Then
                Dim path As String = findResultMatch.Groups.Item("Path").Value
                Dim lineNumber As Integer = Integer.Parse(findResultMatch.Groups.Item("LineNumber").Value)

                Try
                    DTE.Debugger.Breakpoints.Add("", path, lineNumber)
                Catch ex As Exception
                    ' breakpoints can't be added everywhere
                End Try
            End If

            findResult = findResultsReader.ReadLine()
        End While
    End Sub
End Module

Este ejemplo utiliza los resultados de la ventana "Buscar resultados 1";es posible que desee crear un acceso directo individual para cada ventana de resultados.

Puede crear un método abreviado de teclado yendo a Herramientas|Opciones...y seleccionando Teclado bajo la Ambiente sección en la navegación de la izquierda.Seleccione su macro y asigne cualquier acceso directo que desee.

También puedes agregar tu macro a un menú o barra de herramientas yendo a Herramientas|Personalizar...y seleccionando el Macros sección en la navegación de la izquierda.Una vez que ubique su macro en la lista, puede arrastrarla a cualquier menú o barra de herramientas, donde su texto o ícono se puede personalizar según lo que desee.

Otros consejos

Si puedes buscar la palabra exactamente, puedes usar un par de atajos de teclado para hacerlo rápidamente.

Herramientas -> Opciones -> Entorno -> Teclado

  • Editar.GoToFindResults1NextLocation
  • EditorContextMenus.CodeWindow.Breakpoint.InsertBreakpoint

Asígnalos a Control+Alt+F11 y F10 y podrás ver todos los resultados muy rápidamente.Sin embargo, no he encontrado un atajo para pasar a la siguiente referencia.

Necesitaba algo similar para deshabilitar todos los puntos de interrupción y colocar un punto de interrupción en cada "Capturar ex como excepción".Sin embargo, lo amplié un poco para que coloque un punto de interrupción en cada aparición de la cadena que haya seleccionado.Todo lo que necesita hacer con esto es resaltar la cadena en la que desea tener un punto de interrupción y ejecutar la macro.

 Sub BreakPointAtString()

    Try
        DTE.ExecuteCommand("Debug.DisableAllBreakpoints")
    Catch ex As Exception

    End Try

    Dim tsSelection As String = DTE.ActiveDocument.Selection.text
    DTE.ActiveDocument.Selection.selectall()
    Dim AllText As String = DTE.ActiveDocument.Selection.Text

    Dim findResultsReader As New StringReader(AllText)
    Dim findResult As String = findResultsReader.ReadLine()
    Dim lineNum As Integer = 1

    Do Until findResultsReader.Peek = -1
        lineNum += 1
        findResult = findResultsReader.ReadLine()
        If Trim(findResult) = Trim(tsSelection) Then
            DTE.ActiveDocument.Selection.GotoLine(lineNum)
            DTE.ExecuteCommand("Debug.ToggleBreakpoint")
        End If
    Loop

End Sub

Espero que funcione para ti :)

Paul, muchas gracias, pero tengo el siguiente error (cuadro de mensaje), tal vez necesite reiniciar mi PC:

Error
---------------------------
Error HRESULT E_FAIL has been returned from a call to a COM component.
---------------------------
OK   
---------------------------

Yo propondría la siguiente solución que es muy sencilla pero a mí me funciona.

Sub BreakPointsFromSearch()
    Dim n As Integer = InputBox("Enter the number of search results")

    For i = 1 To n
        DTE.ExecuteCommand("Edit.GoToNextLocation")
        DTE.ExecuteCommand("Debug.ToggleBreakpoint")            
    Next
End Sub
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top