42

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

4

6 回答 6

24

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

简而言之,您可以通过按 Ctrl+K、B 并在ClassName::*函数字段中输入来调出“新断点”对话框。在 Visual Studio 2017 中,您需要在字段中包含命名空间,如NamespaceName::ClassName::*. 然后,您可以在断点窗口中禁用其中的一些。

于 2013-02-22T14:55:51.513 回答
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
于 2013-10-12T14:44:49.307 回答
1

您可以尝试一个类断点加载项,或者您可以使用替换表达式__debugbreak()在每个方法的开头添加一个。

于 2012-07-24T07:58:22.883 回答
1

由于某种原因,接受的答案对我不起作用。而且我认为我的解决方法不适用于 Visual Studio 2010。但我使用Visual Studio 扩展的宏和我的 Visual Studio 2015 来做到这一点。

脚步:

  1. 为方法的左大括号找到 ( Ctrl+ F) 正确的缩进。通常是 8 个空格(或 2 个制表符等,具体取决于您可能所做的设置)。
  2. 用一个左大括号附加它{
  3. 在前面加上\r\n以确保它不匹配任何嵌套的大括号。现在它可能看起来像\r\n {. 此外,打开正则表达式搜索(通过按*搜索对话框上的 )。
  4. 开始录制宏。
  5. F3再按F9以添加断点。这为使用该技巧找到的第一个方法添加了一个断点。
  6. 停止录制宏。根据您可能拥有的方法数量播放它。
  7. 注意:当你到达终点时要注意。否则它将从顶部重新开始,并开始删除您刚刚添加的断点。

让我知道有任何混淆。

于 2016-12-07T10:07:22.797 回答
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

于 2018-11-24T12:37:56.553 回答
-1

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

于 2020-04-22T17:11:18.337 回答