Visual Studio 2005-2015 では、特定の参照を含むすべての行を検索し、[検索結果] ウィンドウに表示することができます。
これらの結果行が表示されたので、それらすべてにデバッグ ブレークポイントを追加できるキーボード ショートカットはありますか?
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] ウィンドウの結果を使用します。結果ウィンドウごとに個別のショートカットを作成することができます。
Tools|Options...に移動し、左側のナビゲーションのEnvironmentセクションでKeyboardを選択すると、キーボード ショートカットを作成できます。マクロを選択し、好きなショートカットを割り当てます。
Tools|Customize...に移動し、左側のナビゲーションでMacrosセクションを選択して、マクロをメニューまたはツールバーに追加することもできます。リストでマクロを見つけたら、それを任意のメニューまたはツールバーにドラッグして、そのテキストまたはアイコンを自由にカスタマイズできます。
すべてのブレークポイントを無効にし、すべての「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
それがあなたのために働くことを願っています:)
単語を正確に検索できる場合は、一対のキーボード ショートカットを使用してすばやく検索できます。
ツール -> オプション -> 環境 -> キーボード
それらを Control+Alt+F11 および F10 に割り当てると、すべての結果をすばやく確認できます。ただし、次の参照に移動するためのショートカットは見つかりませんでした。
ポール、どうもありがとう。しかし、次のエラー (メッセージ ボックス) が表示されます。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