web-dev-qa-db-fra.com

Puis-je définir des points d'arrêt pour toutes les méthodes d'une classe à la fois dans Visual Studio?

J'ai 40-50 méthodes dans une classe, je veux ajouter des points d'arrêt à toutes. Puis-je ajouter des points d'arrêt à tous simultanément?

27
Charu

Il existe une méthode sans addon décrite ici: Comment définir un point d'arrêt sur une classe C++ dans le débogueur Visual Studio

En bref, vous pouvez afficher la boîte de dialogue "Nouveau point d'arrêt" en appuyant sur CTRL + B et saisir ClassName::* dans le champ de fonction. Vous pouvez ensuite en désactiver certains dans la fenêtre des points d'arrêt.

19
vt.

Voici votre macro, mais il faut un certain temps pour définir des points d'arrêt sur plus de 1000 fonctions ... et cela ralentira 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

Il existe un complément de point d'arrêt de classe que vous pouvez essayer, ou vous pouvez utiliser un remplacer l'expression pour ajouter un __debugbreak() au début de chaque méthode.

1
PhilMY

Si vous utilisez vim (vsvim), vous pouvez manipuler les points d'arrêt assez facilement. Voici quelques exemples.

pause sur chaque ligne: {Escape} qq: vsc Debug.ToggleBreakpoint{Enterurtherjq100@q

rompre avec chaque méthode:

{Escape} qq: vsc Edit.NextMethod {Entrée}: vsc Debug.ToggleBreakpoint{EnterBuchjq100@q

remplacez le 100 par le nombre approprié de lignes/méthodes.

exemple: https://imgur.com/SFhlEr7

0
dog