2008-09-16 11 views

Odpowiedz

14

Możesz to zrobić dość łatwo dzięki makrze programu Visual Studio. Wewnątrz Visual Studio, uderzył Alt-F11, aby otworzyć Macro IDE i dodać nowy moduł prawym przyciskiem myszy i wybierając Dodaj MyMacros | Dodaj moduł ...

Wklej następujący tekst w edytorze źródło:

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 

W tym przykładzie wyniki są wyświetlane w oknie "Znajdź wyniki 1"; możesz utworzyć indywidualny skrót dla każdego okna wyników.

można utworzyć skrót klawiaturowy, przechodząc do Narzędzia | Opcje ... i wybierając klawiatura pod sekcji Środowiska w nawigacji po lewej stronie. Wybierz makro i przypisz dowolny skrót.

Możesz dodać swoje makro do menu lub paska narzędzi, przechodząc do Narzędzia | Dostosuj ... i wybierając sekcję Makra w nawigacji po lewej stronie. Po zlokalizowaniu makra na liście możesz przeciągnąć je do dowolnego menu lub paska narzędzi, gdzie można dostosować jego tekst lub ikonę do dowolnych potrzeb.

3

Jeśli możesz dokładnie wyszukać słowo, możesz użyć pary skrótów klawiaturowych, aby zrobić to szybko.

Narzędzia -> Opcje -> Enviroment -> Klawiatura

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

Przypisywanie im Control + Alt + F11 i F10 i możesz bardzo szybko przejrzeć wszystkie wyniki. Nie znalazłem jednak skrótu do następnego odnośnika.

+2

F3 i F9 to zrobić bez konieczności ponownego przypisania skrótów. – StuperUser

+0

F3 przechodzi do następnego wyniku w bieżącym panelu, a nie do następnego wiersza w polu Znajdź wyniki.Możliwe jest użycie F3 w panelu Znajdź wyniki, ale musisz również nacisnąć Enter i kartę pomiędzy panelami kodu i wyników. Ta odpowiedź oszczędza wiele naciśnięć klawiszy. –

3

Potrzebowałem czegoś podobnego, aby wyłączyć wszystkie punkty przerwania i umieścić punkt przerwania na każdym "Catch ex as Exception". Jednak trochę to rozszerzyłem, aby umieścić punkt przerwania przy każdym wystąpieniu wybranego ciągu. Wszystko, co musisz zrobić z tym jest podświetl ciąg, który chcesz mieć punkt przerwania i uruchom makro.

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 

Nadzieję, że pracuje dla ciebie :)

+0

To jest takie fajne; Dziękuję Paul – Noah

1

Paul, dzięki, ale mam następujący komunikat o błędzie (pole), mogą być potrzebne, aby ponownie uruchomić mój komputer:

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

Chciałbym zaproponować następujące rozwiązanie, które jest bardzo proste, ale to działa na mnie

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 
Powiązane problemy