2009-09-02 18 views
25

मैं एक बग को ट्रैक करने की कोशिश कर रहा हूं जो तब होता है जब मैं एएसपीएक्स पेज पर किसी विशेष तत्व पर क्लिक करता हूं ...क्या विजुअल स्टूडियो में निष्पादित कोड की अगली पंक्ति को तोड़ने का कोई तरीका है?

अतीत में मुझे उस विशेष घटना को संभालने वाली कक्षा को ट्रैक करना पड़ा और एक उस रेखा पर ब्रेक पॉइंट जो मुझे लगता है कि हिट होना चाहिए। आखिर में मुझे सही कक्षा मिलने से पहले कई कोशिशें होती हैं .... विशेष रूप से यदि कक्षा कहीं उपयोगकर्ता दफन है ...

तो यह मुझे आश्चर्यचकित कर रहा है कि विजुअल स्टूडियो को तोड़ने का कोई तरीका है या नहीं एएसपीएक्स पेज पर एक तत्व (एक बटन कहें) पर क्लिक करने के बाद निष्पादित कोड की अगली पंक्ति पर। मुझे पता है कि फेंकने वाले किसी भी अपवाद को तोड़ने का एक तरीका है इसलिए मैं सोच रहा हूं कि ऐसा कुछ ऐसा है जो मेरी मदद कर सकता है।

तो सुविधा की इस तरह की संभावना नहीं है, शायद किसी ने मुझे जल्दी से कक्षा मैं डिबग करने के लिए इच्छित वस्तु खोजने में एक बेहतर तरीका सुझाव है कि सकता है ...

+0

यह "बग" कैसे प्रकट होता है? क्या आप वहां ब्रेकपॉइंट सेट नहीं कर सकते? या क्या आप किसी अन्य कोड को जानते हैं जो उस बटन पर क्लिक करने के बाद निष्पादित हो जाएगा? यदि हां, तो स्टैक विंडो पर एक नज़र डालें। यह आपको इवेंट हैंडलर कहलाता है। फिर आप वहां एक ब्रेकपॉइंट डाल सकते हैं। – sbi

+0

@ एसबीआई बग खुद को प्रकट करता है जब मैं एक बटन पर क्लिक करता हूं जो अधिक जानकारी दिखाने के लिए विस्तारित होता है और आवश्यकतानुसार अधिक डेटा दिखाता है। मैं डेटा को प्रदर्शित करने के लिए कुछ फ़िल्टरिंग जोड़ने के लिए कौन सी विधि खोजने की कोशिश कर रहा था। आखिरकार मैं उस विधि को स्पॉट करने में सक्षम था जिसे खराब नाम दिया गया था। यह एक प्रतिनिधि तरीका था जब एक डाटाग्रिड आइटम का उपयोग किया गया था। मैं अभी भी चाहता हूं कि यह ढूंढना आसान हो ... – mezoid

+0

@ किरालेसा क्या एक आश्चर्यजनक बेकार टिप्पणी है। शायद आप मुझे अपमानित करने के बजाय अपने उत्तर पर पुनर्विचार करने का एक बेहतर तरीका ढूंढ सकते हैं ... – mezoid

उत्तर

27

क्या आपने डीबग> ब्रेक ऑल ("पॉज़") बटन को आजमाया है? (Ctrl +तोड़)

Debug > Break All

यह आमतौर पर कहीं सुंदर शो() एक WinForms अनुप्रयोग में अपने मुख्य फार्म के लिए पर, स्टैक पर कम की तरह तोड़ देंगे, लेकिन अगर तुम तो में कदम इससे पहले कि यह इस तरह की चीज के लिए बहुत अच्छी तरह से काम करेगा।

+1

मुझे यकीन नहीं है कि ब्रेक ऑल बटन काफी है जो मैं ढूंढ रहा हूं क्योंकि मुझे लगता है कि कोड मिलीसेकंड के भीतर निष्पादित किया जाएगा स्क्रीन पर मेरे क्लिक के बारे में और इस तरह मैं इसे पर्याप्त तेज़ी से रोक नहीं पाएगा। – mezoid

+2

मैं दोहराता हूं: क्या आपने * कोशिश की है *? बटन क्लिक करने के बाद आप ब्रेक ऑल पर क्लिक करने की कोशिश नहीं करते हैं। * आप बटन को क्लिक करने से पहले * सभी को तोड़ें * पर क्लिक करें, फिर चरण में क्लिक करें, और * फिर * बटन क्लिक करें। –

+0

ठीक है, मैंने इसे फिर से कोशिश की है ... और यह काम नहीं किया। शायद इसकी वजह यह है कि मैं एक एएसपीएक्स पेज डीबग कर रहा हूं। जब मैं विराम दबाता हूं और फिर खिड़की पर कुछ क्लिक करता हूं तो यह पृष्ठ लोड करने का प्रयास करता है ... लेकिन कुछ नहीं होता ... मुझे दौड़ना पड़ता है और फिर इसे तोड़ने से पहले इसे फिर से रोकना पड़ता है और तब तक यह बहुत देर हो चुकी है । मुझे आपके सुझाव को WinForms या कंसोल ऐप की तरह कुछ करना होगा और देखें कि इसके लिए यह कैसे जाता है ... यदि यह काम करता है तो मैं आपको उत्तर के रूप में चिह्नित करूंगा ... लेकिन इसके बाद मैं इसके बाद क्या कर रहा हूं ' टी काम करने लगते हैं ... – mezoid

4

आप Step Into (F11) या Step Over (F10) के लिए देख रहे हैं?

- संपादित करें

आप भी Call Stack खिड़की के बारे में पता है? यह आपको अपना स्थान निर्धारित करने में मदद कर सकता है, और क्या हो रहा है।

+0

क्षमा करें, मुझे एफ 11, एफ 10, और कॉल स्टैक विंडो से अवगत है। मैं कुछ ऐसा ढूंढ रहा हूं जो एक एएसपीएक्स पेज पर एक क्रिया को ट्रिगर करने के बाद कोड बेस पर क्लिक करने के बाद मुझे तोड़ने की अनुमति देता है। – mezoid

+0

मेज़ॉयड: शायद आप अपने सिस्टम के एक विशिष्ट भाग में 'System.Diagnostics.Debugger.Break();' लिखना चाहते हैं? इससे आप ब्रेक पॉइंट को स्पष्ट रूप से सेट करने के बावजूद डीबगर को तोड़ने के लिए बाध्य करेंगे? –

+0

सिवाय इसके कि मुझे नहीं पता कि कक्षा कहां है कि मुझे ब्रेक डालने की ज़रूरत है ... :( – mezoid

0

डीबग -> अपवाद

चेक CLR अपवाद के लिए फेंक दिया।

संपादित

बाधाओं आप एक CLR अपवाद हो रही है कर रहे हैं। इस विधि का उपयोग करते समय एक अपवाद होने पर डीबगर हमेशा टूट जाएगा। यह स्टैक ट्रेस पढ़ने की तुलना में बहुत सुविधाजनक है।

+0

यह अच्छा है लेकिन मेरे मामले में जिस बग को मैं ढूंढ रहा हूं वह अपवाद के कारण नहीं है – mezoid

2

Conditional Breakpoints आपका उत्तर हो सकता है। आप उन्हें सेट कर सकते हैं, आपको लगता है कि आपका कोड टूट रहा है और जब स्थिति संतुष्ट हो जाती है तो वे केवल रुक जाएंगे।

+0

सच है, लेकिन मैं जिस कोड को ढूंढ रहा हूं उसे ढूंढने के लिए ब्रेक पॉइंट्स का पूरा समूह सेट करने के लिए कोई रास्ता नहीं ढूंढना चाहता हूं – mezoid

0

कुछ विचार:

  • आप अपने ईवेंट हैंडलर्स के लिए एक सुसंगत नामकरण परंपरा का उपयोग करते हैं तो यह उन सब के लिए एक वैश्विक खोज करते हैं और breakpoints जोड़ने के लिए तुच्छ होना चाहिए। आप पहली हिट पर मैक्रो को जल्दी से रिकॉर्ड कर सकते हैं और फिर कई बार ऑपरेशन को दोहराने के लिए सभी दर्द लेने के लिए मैक्रो वापस चला सकते हैं। कुछ अभ्यास के साथ आप कुछ ही सेकंड में सभी हैंडलर को तोड़ने में सक्षम होंगे।

  • ईवेंट के लिए एक अतिरिक्त ईवेंट हैंडलर जोड़ें (इसे शुरुआती बनाएं - उदाहरण के लिए कन्स्ट्रक्टर में - इसलिए यह आपके ऐप को जोड़ने वाले अन्य सभी ईवेंट हैंडलर से पहले जोड़ा गया है, और इसलिए उम्मीद है कि पहले इसे बुलाया जाएगा) और इसमें ब्रेकपॉइंट चिपकाएं। एक बार ब्रेकपॉइंट पर पहुंचने के बाद आप ईवेंट पर अन्य ईवेंट हैंडलर के माध्यम से एक ही चरण बना सकते हैं।

  • एक कस्टम इवेंट हैंडलर लिखें जो क्लिक को संभालता है और बस एक नया ईवेंट उत्पन्न करता है। इस माध्यमिक घटना में अपने सभी अन्य ईवेंट हैंडलर संलग्न करें। फिर आप पहले हैंडलर को तोड़ सकते हैं और द्वितीयक हैंडलर के माध्यम से कदम उठा सकते हैं।

संबंधित मुद्दे