web-dev-qa-db-ja.com

Visual Studioでクラス内のすべてのメソッドに一度にブレークポイントを設定できますか?

クラスに40から50のメソッドがあります。それらすべてにブレークポイントを追加したいと思います。それらすべてにブレークポイントを一度に追加できますか?

32
Charu

ここで説明されているアドオンなしのメソッドがあります。 Visual StudioデバッガーのC++クラスにブレークポイントを設定する方法

つまり、CTRL + Bを押して「新しいブレークポイント」ダイアログを表示し、関数フィールドにClassName::*と入力します。その後、ブレークポイントウィンドウでそれらのいくつかを無効にできます。

20
vt.

これがあなたのマクロですが、1000以上の関数にブレークポイントを設定するのには時間がかかります...そしてそれはVisual Studioを遅くします!

Sub BreakAtEveryFunction()
    For Each project In DTE.Solution.Projects
        SetBreakpointOnEveryFunction(project)
    Next project
End Sub


' Macro editor
Sub SetBreakpointOnEveryFunction(ByVal project As Project)
    Dim cm = project.CodeModel

    ' Look for all the namespaces and classes in the 
    ' project.
    Dim list As List(Of CodeFunction)
    list = New List(Of CodeFunction)
    Dim ce As CodeElement
    For Each ce In cm.CodeElements
        If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
            ' Determine whether that namespace or class 
            ' contains other classes.
            GetClass(ce, list)
        End If
    Next

    For Each cf As CodeFunction In list

        DTE.Debugger.Breakpoints.Add(cf.FullName)
    Next

End Sub

Sub GetClass(ByVal ct As CodeElement, ByRef list As List(Of CodeFunction))

    ' Determine whether there are nested namespaces or classes that 
    ' might contain other classes.
    Dim aspace As CodeNamespace
    Dim ce As CodeElement
    Dim cn As CodeNamespace
    Dim cc As CodeClass
    Dim elements As CodeElements
    If (TypeOf ct Is CodeNamespace) Then
        cn = CType(ct, CodeNamespace)
        elements = cn.Members
    Else
        cc = CType(ct, CodeClass)
        elements = cc.Members
    End If
    Try
        For Each ce In elements
            If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
                GetClass(ce, list)
            End If
            If (TypeOf ce Is CodeFunction) Then
                list.Add(ce)
            End If
        Next
    Catch
    End Try
End Sub
5
alexkovelsky

クラスブレークポイントアドイン があるか、または replace expression を使用して __debugbreak() を追加できます各メソッドの開始。

1
PhilMY

何らかの理由で、受け入れられた回答がうまくいきませんでした。また、私の回避策はVisual Studio 2010には適用されないと思います。しかし、これを行うために、Visual Studio 2015で Macros for Visual Studio 拡張を使用しました。

手順:

  1. 検索(Ctrl+F)メソッドの左中括弧の正しいインデント。通常、これは8つの空白(または行った設定に基づく2つのタブなど)です。
  2. 左中括弧{を追加します。
  3. これに\r\nを付加して、ネストされた中括弧と一致しないことを確認します。これは\r\n {のようになります。また、正規表現検索をオンにします(検索ダイアログで*を押します)。
  4. マクロの記録を開始します。
  5. 押す F3 そして次に押します F9 ブレークポイントを追加します。これにより、トリックを使用して見つかった最初のメソッドにブレークポイントが追加されます。
  6. マクロの記録を停止します。あなたが持っているかもしれない方法の数のためにそれを再生します。
  7. 注意:最後に到達したときに注意してください。そうでない場合は、上から再び開始され、追加したブレークポイントが削除されます。

混乱があることを知らせてください。

1
Nikhil Girraj

Vim(vsvim)を使用すると、かなり簡単にブレークポイントを操作できます。下記は用例です。

すべての行で改行:{Escape} qq:vsc Debug.ToggleBreakpoint{Enter}jq100@q

すべてのメソッドで中断:

{Escape} qq:vsc Edit.NextMethod {Enter}:vsc Debug.ToggleBreakpoint{Enter}jq100@q

100を適切な行数/メソッド数に置き換えます。

例: https://imgur.com/SFhlEr7

0
dog