【发布时间】:2012-07-24 07:03:03
【问题描述】:
我在一个类中有 40-50 个方法,我想为所有方法添加断点。我可以一次给所有的断点添加吗?
【问题讨论】:
标签: visual-studio-2010 debugging breakpoints
我在一个类中有 40-50 个方法,我想为所有方法添加断点。我可以一次给所有的断点添加吗?
【问题讨论】:
标签: visual-studio-2010 debugging breakpoints
这里描述了一个无插件的方法: How to set a breakpoint on a C++ class in the Visual Studio Debugger
简而言之,您可以通过按 Ctrl+K、B 并在函数字段中输入 ClassName::* 来调出“新建断点”对话框。在 Visual Studio 2017 中,您需要在字段中包含命名空间,如 NamespaceName::ClassName::*。
然后,您可以在断点窗口中禁用其中的一些。
【讨论】:
这是您的宏,但在 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
【讨论】:
您可以尝试使用class breakpoint add-in,或者您可以使用replace expression 在每个方法的开头添加__debugbreak()。
【讨论】:
由于某种原因,接受的答案对我不起作用。而且我认为我的解决方法不适用于 Visual Studio 2010。但我在 Visual Studio 2015 中使用了 Macros for Visual Studio 扩展来执行此操作。
步骤:
{ 附加此内容。\r\n 以确保它不匹配任何嵌套的大括号。现在它可能看起来像\r\n {。此外,打开正则表达式搜索(通过在搜索对话框中按 *)。如果有任何混淆,请告诉我。
【讨论】:
如果您使用 vim (vsvim),您可以相当轻松地操作断点。以下是一些示例。
在每一行打断:{Escape}qq:vsc Debug.ToggleBreakpoint{Enter}jq100@q
打破每个方法:
{Escape}qq:vsc Edit.NextMethod{Enter}:vsc Debug.ToggleBreakpoint{Enter}jq100@q
将 100 替换为适当数量的行/方法。
【讨论】:
单击“调试”选项卡并选择“全部调试”。然后调用您要调试的方法/控制器/函数,并使用调试器单步执行(不要继续,除非您设置了断点)。
【讨论】: