2012-06-08 7 views
5

कोई निश्चित शर्त मिलने पर डीबग मोड में प्रवेश करने का कोई तरीका है?किसी शर्त को पूरा होने पर डीबग मोड कैसे दर्ज करें?

उदाहरण के लिए मान लीजिए कि मैं लाइन जिस पर i == 1 सच हो जाता है पर डिबग मोड में प्रवेश करने के चाहेगा करते हैं:

using System; 

namespace ConditionalDebug 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var r = new Random(); 
      var i = r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i = 1; 
      Console.WriteLine(i); 
     } 
    } 
} 

मैं जानता हूँ कि यह कैसा सशर्त breakpoints सेट करने के लिए संभव है:

conditional breakpoint

लेकिन निश्चित रूप से मैं इसका उपयोग नहीं कर सका क्योंकि मुझे कोड में प्रत्येक पंक्ति के लिए एक सशर्त ब्रेकपॉइंट जोड़ना होगा जहां स्थिति मूल्य बदल सकता है और यह वास्तविक एप्लिकेशन में बहुत गन्दा हो जाएगा।

तो, क्या वैश्विक स्तर पर i == 1 को सेट करने का कोई तरीका है ताकि डीबगर उस स्थिति को तोड़ दे जिस पर स्थिति पूरी हो जाती है?

आपकी मदद के लिए धन्यवाद!

उत्तर

3

संक्षिप्त उत्तर 'नहीं'

लंबे जवाब 'नहीं वास्तव में है, लेकिन थोड़े' है। ऐसी चीजें हैं जो आप चाहते हैं कि व्यवहार के करीब हो।

  • आप वॉच विंडो का उपयोग कर सकते हैं और मैन्युअल रूप से कोड के माध्यम से कदम उठा सकते हैं और इसे बदल सकते हैं।
  • आप चर पर सभी संदर्भ पा सकते हैं और उन सभी कथनों को अलग कर सकते हैं जो आपके चर और स्थान ब्रेक पॉइंट्स को बदल सकते हैं।
  • आप उपर्युक्त कर सकते हैं, लेकिन एक रैपर फ़ंक्शन (या इसे एक संपत्ति बनाते हैं) का उपयोग करें और केवल उस फ़ंक्शन (या प्रॉपर्टी सेटर) के माध्यम से चर के मान को सेट करें, फिर आपके पास एक सिंगल पॉइंट होगा जहां आप अपना सशर्त ब्रेक-पॉइंट सेट कर सकते हैं पुराने/नए मूल्य की तुलना करने के लिए।
  • आप प्रत्येक पंक्ति पर एक ब्रेक पॉइंट डाल सकते हैं और एक बार में उन सभी के लिए स्थिति निर्धारित कर सकते हैं। आप एक वीएस प्लग-इन या मैक्रो लिखकर इसे स्वचालित करने में सक्षम हो सकते हैं।
  • यह मेरे बाहर है - लेकिन मुझे यकीन है कि अपने स्वयं के डीबगर लिखने और अपने 'ब्रेक जब भी एक्स चेंज' को लागू करने के लिए आश्चर्यजनक जटिल और भयानक कुछ करना संभव है।
+0

धन्यवाद, अच्छा जवाब: डी मुझे यह विचार पसंद है: 'आप प्रत्येक पंक्ति पर ब्रेक पॉइंट डाल सकते हैं और एक बार में उन सभी के लिए शर्त निर्धारित कर सकते हैं। आप एक वीएस प्लग-इन या मैक्रो लिखकर इसे स्वचालित करने में सक्षम हो सकते हैं –

1

वीएस की ब्रेकपॉइंट्स विंडो में एकाधिक ब्रेकपॉइंट्स का चयन करना संभव है, और फिर दाहिने माउस बटन के साथ आप दोनों एक ही चरण में एक निश्चित स्थिति निर्धारित कर सकते हैं।

क्या यह आपके लिए ठीक है?

+0

धन्यवाद, यह एक उपयोगी जानकारी है लेकिन वास्तविक परियोजनाओं के लिए कोड की बहुत सारी लाइनों के साथ यह लगभग असंभव होगा। :) मुझे जो चाहिए वह पूरे समाधान में प्रत्येक पंक्ति पर एक सशर्त ब्रेकपॉइंट होने के बराबर होगा। –

1

मैं नहीं कहूंगा, अगर आप इसके बारे में सोचते हैं तो आप कोड की हर पंक्ति को मान्य करने के लिए डीबगर से पूछ रहे हैं जहां मैं गुंजाइश में हूं, हालांकि मैं यह देखने के लिए देख सकता हूं कि कोई भी काम के बारे में सोच सकता है क्योंकि यह दिलचस्प होगा देखने के लिए :)

+0

हां, यही वह है जो मैं यह पता लगाने की कोशिश कर रहा हूं कि यह संभव है या नहीं: डिबगर के लिए समाधान में कोड की * हर * लाइन के बाद स्थिति की जांच करें। –

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