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

Cha*_*aru 30 debugging breakpoints visual-studio-2010

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

vt.*_*vt. 20

这里描述了一个无插件方法: 如何在Visual Studio调试器中的C++类上设置断点

简而言之,您可以通过按CTRL + B调出"新断点"对话框并输入ClassName::*到功能字段.然后,您可以在断点窗口中禁用其中一些.

  • **Ctrl-K B** 用于 VS-2019 中开箱即用的新函数断点。_Ctrl-B_ 用于构建项目。不要将此与 Ctrl-K Ctrl-B 混淆,后者是代码片段管理器...请社区检查/确认这一点并相应地更新答案。 (7认同)
  • 只是一个更新:在vs 2017中不起作用 (4认同)
  • 我正在使用 mvs 2017,并且在新函数断点中编写了相同的命令“NamespaceName::ClassName::*”,但没有任何反应。 (3认同)

ale*_*sky 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
Run Code Online (Sandbox Code Playgroud)

  • 要使此脚本在VS 2012中工作,您可以将函数复制到新的Addin项目中,并在Addin项目的"OnConnection"方法中调用"BreakAtEveryFunction".该脚本有点过于全面,因为它使用.NET方法,也有错误,Addin项目会抱怨"DTE.Debugger"和"DTE.Solution.Projects",将"DTE"更改为"_applicationObject" .有关Addin项目的更多信息,请参阅[此答案.](http://stackoverflow.com/questions/12027485/alternative-to-macros-in-visual-studio-2012/12394986#12394986) (2认同)