2008-09-16 46 views

答えて

14

Visual Studioマクロを使用すると、これを簡単に実行できます。

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 

は、ソースエディタで次のように貼り付け...モジュールを追加| Visual Studioの中では、マクロIDEを開き、MyMacrosを右クリックして、新しいモジュールを追加し、追加を選択するAltキーを押しながらF11を打ちます

この例では、「Find Results 1」ウィンドウの結果を使用しています。結果ウィンドウごとに個別のショートカットを作成することもできます。オプション...と左側のナビゲーションで環境セクションの下キーボードを選択|

あなたはツールに行くことによって、キーボードのショートカットを作成することができます。マクロを選択し、好きなショートカットを割り当てます。

メニューまたはツールバーにマクロを追加するには、ツール|カスタマイズ...に進み、左側のナビゲーションでマクロセクションを選択します。リスト内のマクロを見つけたら、任意のメニューやツールバーにドラッグして、テキストやアイコンを自由にカスタマイズすることができます。

3

単語を正確に検索することができれば、キーボードショートカットを使用してすばやく検索できます。

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

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

+ Altキー+ F11とF10を制御するためにそれらを割り当て、すべての結果を非常に迅速に処理することができます。私は次の参照に行くためのショートカットを見つけていない。

+2

F3のために働くとF9は、任意のショートカットを再割り当てすることなく、これを行います。 – StuperUser

+0

F3は、検索結果の次の行ではなく、現在のパネルで次の結果に進みます。Find ResultsペインでF3キーを使用することもできますが、Enterキーを押してコードと結果ペインの間にタブを移動する必要があります。この答えは、キーストロークの多くを節約します。 –

3

私はすべてのブレークポイントを無効にし、 "例外としてすべてをキャッチする"にブレークポイントを設定するのに似たものが必要でした。しかし、これを少し拡張して、選択した文字列が出現するたびにブレークポイントを配置します。これで行う必要があるのは、ブレークポイントを設定する文字列を強調表示してマクロを実行することだけです。

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 

はどうもありがとう

+0

これはとてもクールです。ポールありがとう – Noah

1

ポール、:)それはあなたのために働くホープが、私は次のエラー(メッセージボックス)を持って、私は私の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 
関連する問題