我可以在Visual Studio中一次为类中的所有方法设置断点吗?

时间:2012-07-24 07:03:03

标签: visual-studio-2010 debugging breakpoints

我在一个类中有40-50个方法,我想为所有这些方法添加断点。我可以一次性为所有这些添加断点吗?

6 个答案:

答案 0 :(得分:19)

这里描述了一个无插件方法: How to set a breakpoint on a C++ class in the Visual Studio Debugger

简而言之,您可以按CTRL + B调出“New Breakpoint”对话框并在ClassName::*中输入功能字段。 然后,您可以在断点窗口中禁用其中一些。

答案 1 :(得分:5)

这是你的宏,但是需要一段时间才能在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

答案 2 :(得分:1)

您可以尝试class breakpoint add-in,或者您可以使用replace expression在每种方法的开头添加__debugbreak()

答案 3 :(得分:1)

由于某些原因,接受的答案对我没有用。我并不认为我的解决方法适用于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. 注意:请注意何时到达终点。否则它将从顶部重新开始,并开始删除刚刚添加的断点。
  8. 让我知道它有任何混乱。

答案 4 :(得分:0)

如果使用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

答案 5 :(得分:-1)

单击“调试”选项卡,然后选择“全部调试”。然后调用要调试的方法/控制器/函数,并使用调试器逐步调试(除非设置断点,否则不要继续)。