2012-07-24 13 views
21

मेरे पास कक्षा में 40-50 विधियां हैं, मैं उन सभी को ब्रेकपॉइंट जोड़ना चाहता हूं। क्या मैं उन सभी को ब्रेकपॉइंट्स एक बार में जोड़ सकता हूं?क्या मैं विजुअल स्टूडियो में एक बार कक्षा में सभी विधियों के लिए ब्रेकपॉइंट्स सेट कर सकता हूं?

उत्तर

16

वहाँ कोई एडऑन कम विधि यहाँ वर्णित है: How to set a breakpoint on a C++ class in the Visual Studio Debugger

संक्षेप में, आप समारोह क्षेत्र के लिए ClassName::* में Ctrl + बी और प्रकार का उपयोग करके "नया ब्रेकप्वाइंट" संवाद को लाने कर सकते हैं। फिर आप उनमें से कुछ को ब्रेकपॉइंट विंडो में अक्षम कर सकते हैं।

1

एक class breakpoint add-in है जो आप कोशिश कर सकते हैं, या आप प्रत्येक विधि की शुरुआत में __debugbreak() जोड़ने के लिए replace expression का उपयोग कर सकते हैं।

+1

क्या आप कृपया अपने उत्तर के दूसरे भाग पर विस्तृत जानकारी दे सकते हैं? – goamn

4

यहाँ अपने मैक्रो है, लेकिन यह 1000 से अधिक कार्यों पर breakpoints सेट करने के लिए कुछ समय लगता है ... और यह दृश्य स्टूडियो धीमी हो जाएगी!

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 
+1

इस स्क्रिप्ट को वीएस 2012 में काम करने के लिए आप एक नए एडिन प्रोजेक्ट में फ़ंक्शंस में प्रतिलिपि बना सकते हैं और एडिन प्रोजेक्ट के "ऑनकनेक्शन" विधि के अंदर "BreakAtEveryFunction" को कॉल कर सकते हैं। स्क्रिप्ट थोड़ा सा व्यापक है जिसमें यह .NET विधियों को भी करता है, यहां और वहां त्रुटियां भी होती हैं, एडिन प्रोजेक्ट "डीटीई.डेबगर" और "डीटीई। क्रॉल्यूशन.प्रोजेक्ट्स" के बारे में शिकायत करेगा, "डीटीई" को "_applicationObject" में बदल देगा । के लिए ऐड परियोजना के बारे में और अधिक देखने [यह जवाब।] (Http://stackoverflow.com/questions/12027485/alternative-to-macros-in-visual-studio-2012/12394986#12394986) – goamn

1

स्वीकार किए गए उत्तर किसी कारण से मेरे लिए काम नहीं करते थे। और मुझे नहीं लगता कि मेरा कामकाज विजुअल स्टूडियो 2010 पर लागू होता है। लेकिन मैंने ऐसा करने के लिए अपने विजुअल स्टूडियो 2015 के साथ Macros for Visual Studio एक्सटेंशन का उपयोग किया।

कदम:

  1. ढूँढें (Ctrl +एफ) तरीके के उद्घाटन ब्रेस के लिए सही खरोज। आम तौर पर यह आपके द्वारा बनाई गई सेटिंग्स के आधार पर 8 सफेद रिक्त स्थान (या 2 टैब इत्यादि) होता है।
  2. इसे एक उद्घाटन ब्रेस { के साथ संलग्न करें।
  3. यह सुनिश्चित करने के लिए कि यह किसी नेस्टेड ब्रेसिज़ से मेल नहीं खाता है, \r\n के साथ इसे तैयार करें। अब यह \r\n { जैसा दिख सकता है। साथ ही, नियमित अभिव्यक्ति खोज चालू करें (खोज संवाद पर * दबाकर)।
  4. एक मैक्रो रिकॉर्ड करना प्रारंभ करें।
  5. F3 दबाएं और फिर ब्रेकपॉइंट जोड़ने के लिए F9 दबाएं। यह चाल का उपयोग कर पाए गए पहले विधि में ब्रेकपॉइंट जोड़ता है।
  6. मैक्रो रिकॉर्डिंग बंद करो। आपके पास होने वाली विधि की संख्या के लिए इसे चलाएं।
  7. सावधानी: जब आप अंत तक पहुंचते हैं तो जागरूक रहें। अन्यथा यह शीर्ष से फिर से शुरू होगा और आपके द्वारा अभी जोड़े गए ब्रेकपॉइंट्स को हटाना शुरू कर देगा।

मुझे पता है कि यह किसी भ्रम में है।