2008-09-16 14 views

risposta

14

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

incollare il seguente nell'editor fonte:

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 nella finestra "Trova risultati 1"; potresti voler creare una scorciatoia individuale per ogni finestra dei risultati.

È possibile creare una scorciatoia da tastiera andando in Strumenti | Opzioni ... e selezionando tastiera sotto la sezioneAmbiente nel navigazione a sinistra. Seleziona la tua macro e assegna qualsiasi scorciatoia che ti piace.

Puoi anche aggiungere la tua macro a un menu o barra degli strumenti andando su Strumenti | Personalizza ... e selezionando la sezione Macro nella navigazione a sinistra. Una volta individuata la tua macro nell'elenco, puoi trascinarla in qualsiasi menu o barra degli strumenti, dove il testo o l'icona possono essere personalizzati in base a ciò che desideri.

3

Se è possibile cercare esattamente la parola, è possibile utilizzare un paio di scorciatoie da tastiera per farlo rapidamente.

Strumenti -> Opzioni -> Ambiente -> Tastiera

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

Assegnare loro di Ctrl + Alt + F11 e F10 e puoi esaminare tutti i risultati molto rapidamente. Non ho trovato una scorciatoia per andare al prossimo riferimento comunque.

+2

F3 e F9 fare questo senza dover ri-assegnare qualsiasi scorciatoie. – StuperUser

+0

F3 passa al risultato successivo nel pannello corrente, non alla riga successiva in Trova risultati.È possibile utilizzare F3 nel riquadro Trova risultati, ma è anche necessario premere Invio e scheda tra i riquadri codice e risultati. Questa risposta consente di risparmiare un sacco di tasti. –

3

Avevo bisogno di qualcosa di simile per disabilitare tutti i punti di interruzione e posizionare un punto di interruzione su ogni "Catch ex come eccezione". Tuttavia, l'ho espanso un po 'in modo da posizionare un breakpoint ad ogni occorrenza della stringa che hai selezionato. Tutto ciò che devi fare è evidenziare la stringa su cui vuoi avere un punto di interruzione ed 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 

auguro che funziona per voi :)

+0

È molto bello; Grazie Paolo – Noah

1

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

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

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

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