Comment ajouter des points d'arrêt de débogage aux lignes affichées dans un & # 8220; Résultats de la recherche & # 8221; fenêtre dans Visual Studio

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

Question

Dans Visual Studio 2005-2015, il est possible de rechercher toutes les lignes contenant certaines références et de les afficher dans un champ "Résultats de la recherche". fenêtre.

Maintenant que ces lignes de résultats sont affichées, existe-t-il un raccourci clavier permettant d'ajouter des points d'arrêt de débogage à toutes?

Était-ce utile?

La solution

Cette réponse ne fonctionne pas pour Visual Studio 2015 ou version ultérieure. Vous trouverez une réponse plus récente ici .

Vous pouvez le faire assez facilement avec une macro Visual Studio. Dans Visual Studio, appuyez sur Alt-F11 pour ouvrir l'EDI de macro et ajouter un nouveau module en cliquant avec le bouton droit de la souris sur MyMacros et en sélectionnant Ajouter | Ajouter un module ...

Collez les éléments suivants dans l’éditeur de code source:

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

Cet exemple utilise les résultats de la recherche " Résultats de la recherche 1 " la fenêtre; vous souhaiterez peut-être créer un raccourci individuel pour chaque fenêtre de résultat.

Vous pouvez créer un raccourci clavier en allant dans Outils | Options ... et en sélectionnant Clavier dans la section Environnement de la navigation de gauche. Sélectionnez votre macro et attribuez le raccourci de votre choix.

Vous pouvez également ajouter votre macro à un menu ou à une barre d'outils en allant dans Outils | Personnaliser ... et en sélectionnant la section Macros dans la navigation de gauche. Une fois que vous avez localisé votre macro dans la liste, vous pouvez la faire glisser dans n’importe quel menu ou barre d’outils, où son texte ou son icône peuvent être personnalisés à votre guise.

Autres conseils

Si vous pouvez rechercher le mot avec précision, vous pouvez utiliser une paire de raccourcis clavier pour le faire rapidement.

Outils - > Options - > Environnement - > Clavier

  • Edit.GoToFindResults1NextLocation
  • EditorContextMenus.CodeWindow.Breakpoint.InsertBreakpoint

Attribuez-les à Ctrl + Alt + F11 et F10 pour pouvoir consulter tous les résultats très rapidement. Je n'ai cependant pas trouvé de raccourci pour aller à la référence suivante.

J'avais besoin de quelque chose de similaire pour désactiver tous les points d'arrêt et placer un point d'arrêt sur chaque "Catch ex en tant qu'exception". Cependant, j’ai développé cela un peu afin qu’il place un point de rupture à chaque occurrence de la chaîne que vous avez sélectionnée. Tout ce que vous avez à faire avec ceci est de mettre en évidence la chaîne sur laquelle vous voulez avoir un point d'arrêt et d'exécuter 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

J'espère que cela fonctionne pour vous:)

Paul, merci beaucoup, mais j'ai le message d'erreur suivant (message), je dois peut-être redémarrer mon PC:

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

Je proposerais la solution suivante qui est très simple mais qui fonctionne pour moi

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top