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
-
09-06-2019 - |
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?
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