Visual Studio の「検索結果」ウィンドウに表示される行にデバッグ ブレークポイントを追加するにはどうすればよいですか

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

質問

Visual Studio 2005 ~ 2015 では、特定の参照を含むすべての行を検索し、「検索結果」ウィンドウに表示することができます。

これらの結果行が表示されたので、それらすべてにデバッグ ブレークポイントを追加できるキーボード ショートカットはありますか?

役に立ちましたか?

解決

この回答は、Visual Studio 2015 以降では機能しません。より最近の答えが見つかります ここ.

Visual Studio マクロを使用すると、これを非常に簡単に行うことができます。Visual Studio 内で Alt-F11 を押してマクロ IDE を開き、MyMacros を右クリックして [追加]、[モジュールの追加...] の順に選択して新しいモジュールを追加します。

以下をソースエディタに貼り付けます。

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

この例では、「検索結果 1」ウィンドウの結果を使用します。結果ウィンドウごとに個別のショートカットを作成することもできます。

[ツール] | [オプション...] に移動して、キーボード ショートカットを作成できます。そして選択する キーボード環境 左側のナビゲーションのセクション。マクロを選択し、任意のショートカットを割り当てます。

[ツール] | [カスタマイズ...] に移動して、マクロをメニューまたはツールバーに追加することもできます。そして、 マクロ 左側のナビゲーションのセクション。リスト内でマクロを見つけたら、それを任意のメニューまたはツールバーにドラッグし、そのテキストまたはアイコンを必要に応じてカスタマイズできます。

他のヒント

単語を正確に検索できる場合は、2 つのキーボード ショートカットを使用してすばやく検索できます。

ツール -> オプション -> 環境 -> キーボード

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

これらを Control+Alt+F11 および F10 に割り当てると、すべての結果をすばやく確認できます。ただし、次のリファレンスに移動するためのショートカットは見つかりませんでした。

すべてのブレークポイントを無効にし、すべての「Catch ex as Exception」にブレークポイントを配置するようなものが必要でした。ただし、これを少し拡張して、選択した文字列が出現するたびにブレークポイントを配置するようにしました。これに必要なのは、ブレークポイントを設定したい文字列を強調表示してマクロを実行することだけです。

 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

それがあなたのためにうまくいくことを願っています:)

Paul、どうもありがとう。しかし、次のエラー (メッセージ ボックス) が表示されます。PC を再起動する必要があるかもしれません。

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

非常にシンプルですが、私にとってはうまくいく次の解決策を提案します

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top