Come faccio ad aggiungere il Debug di punti di Interruzione di linee visualizzate in un “Risultati della ricerca” finestra di Visual Studio

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

Domanda

In Visual Studio 2005-2015 è possibile trovare tutte le righe che contengono alcuni riferimenti e li visualizza in un "Risultati della ricerca" finestra.

Ora che questi risultati vengono visualizzate linee, c'è qualche scorciatoia da tastiera che consentirebbe l'aggiunta di punti di interruzione debug a tutti loro?

È stato utile?

Soluzione

Questa risposta non lavoro per Visual Studio a partire dal 2015.Un più recente risposta può essere trovata qui.

È possibile farlo abbastanza facilmente con una macro di Visual Studio.All'interno di Visual Studio, premi Alt-F11 per aprire l'IDE Macro e aggiungere un nuovo modulo facendo clic destro su di Macro e selezionare Aggiungi|Aggiungi Modulo...

Incollare il seguente nell'editor di codice sorgente:

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

Questo esempio utilizza i risultati della "ricerca di Risultati da 1" finestra;si potrebbe desiderare di creare una scelta rapida per ogni finestra dei risultati.

È possibile creare una scorciatoia da tastiera andando su Strumenti|Opzioni...e selezione di Tastiera sotto il Ambiente la sezione di navigazione sulla sinistra.Selezionare la macro e assegnare i tasti di scelta rapida che ti piace.

Puoi anche aggiungere una macro a un menu o una barra degli strumenti selezionando Strumenti|Personalizza...e selezione del Macro la sezione di navigazione sulla sinistra.Una volta individuata la macro nell'elenco, è possibile trascinare qualsiasi menu o una barra degli strumenti, dove il suo testo o icona può essere personalizzato a piacimento.

Altri suggerimenti

Se è possibile la ricerca per la parola esattamente, è possibile utilizzare un paio di scorciatoie da tastiera per farlo in fretta.

Strumenti -> Opzioni -> Ambiente -> Tastiera

  • Edit.GoToFindResults1NextLocation
  • EditorContextMenus.CodeWindow.Punto di interruzione.InsertBreakpoint

Assegnare per il Controllo del+Alt+F11 e F10 e si può passare attraverso tutti i risultati molto rapidamente.Non ho trovato una scorciatoia per andare avanti di riferimento, tuttavia.

Avevo bisogno di qualcosa di simile a disattivare tutti i punti di interruzione e inserire un punto di interruzione su ogni "Catch ex as Exception".Tuttavia, ho allargato un po ' così, che mette un punto di interruzione in ogni occorrenza della stringa che hai selezionato.Tutto quello che dovete fare è evidenziare la stringa che si desidera avere un punto di interruzione e di eseguire 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

Spero che funziona per voi :)

Paolo, grazie mille, ma ho il seguente errore (finestra di messaggio), può essere ho bisogno di riavviare il mio PC:

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

Vorrei proporre la seguente soluzione che è molto semplice ma per me funziona

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top