web-gelistirme-sc.com

Kesme noktalarını bir sınıftaki tüm yöntemlere bir kerede Visual Studio'da ayarlayabilir miyim?

Bir sınıfta 40-50 yöntemim var, hepsine sınır değerler eklemek istiyorum. Bir kerede hepsine kesme noktaları ekleyebilir miyim?

27
Charu

Burada açıklanan bir eklenti olmayan yöntem var: Visual Studio Debugger'da bir C++ sınıfında kesme noktası nasıl ayarlanır

Kısacası, CTRL + B tuşlarına basarak "Yeni Kesme Noktası" iletişim kutusunu açıp işlev alanına ClassName::* yazın. Daha sonra bazılarını kesme noktaları penceresinde devre dışı bırakabilirsiniz.

19
vt.

Makronuz burada, ancak 1000 + işlevlerinde sınır değerlerini ayarlamak biraz zaman alıyor ... ve Visual Studio'yu yavaşlatacak!

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

Her bir yöntemin başlangıcında __debugbreak() / eklemek için breakpoint eklentisi deneyebilir veya replace ifadesini kullanabilirsiniz.

1
PhilMY

Kabul edilen cevap nedense benim için işe yaramadı. Ve geçici çözümümün Visual Studio 2010 için geçerli olduğunu sanmıyorum. Ancak bunu yapmak için Visual Studio 2015 ile Visual Studio için Makrolar uzantısını kullandım.

Adımlar:

  1. Bul (Ctrl+Fyöntemlerin açılma ayracı için doğru girinti. Genelde bu, 8 beyaz boşluktur (veya yapmış olduğunuz ayarlara bağlı olarak 2 sekme vs.).
  2. Bunu bir açılış ayracı _{_ ile ekleyin.
  3. İç içe geçmiş parantezlerle eşleşmediğinden emin olmak için bunu _\r\n_ ile seçin. Şimdi _\r\n {_ gibi gözükebilir. Ayrıca, düzenli ifade aramasını açın (arama iletişim kutusundaki _*_ düğmesine basarak).
  4. Bir makro kaydetmeye başlayın.
  5. Basın F3 ve sonra F9 kesme noktası eklemek için Bu, numarayı kullanarak bulunan ilk yönteme bir kesme noktası ekler.
  6. Makroyu kaydetmeyi durdur. Sahip olabileceğiniz yöntem sayısı için oynayın.
  7. Dikkat: Sona ulaştığınızda farkında olun. Aksi halde, en baştan tekrar başlar ve az önce eklediğiniz kesme noktalarını kaldırmaya başlar.

Herhangi bir karışıklık olduğunu bana bildirin.

1
Nikhil Girraj

Eğer vim (vsvim) kullanıyorsanız, kesme noktalarını oldukça kolay bir şekilde değiştirebilirsiniz. İşte bazı örnekler.

her satırda ara: {Escape} qq: vsc Debug.ToggleBreakpoint{Enter [email protected]

her yöntemi kırmak:

{Kaçış} qq: vsc Edit.NextMethod {Enter}: vsc Debug.ToggleBreakpoint{Enter м[email protected]

100'ü uygun sayıda satır/yöntemle değiştirin.

örnek: https://imgur.com/SFhlEr7

0
dog