2011-06-13 13 views
19

मेरे सी # को डीबग करते समय, मैं अक्सर जानना चाहता हूं जब एक चर के मान बदलते हैं और फिर प्रोग्राम की स्थिति की जांच करते हैं।डीबगिंग करते समय मैं "इस परिवर्तनीय परिवर्तन तक कैसे चला सकता हूं"?

वर्तमान में, मैं इसे इस तरह कार्य करें:

  1. घड़ी-सूची हमलावर चर।
  2. शारीरिक रूप से स्पैम F10 (चरण ओवर के लिए शॉर्टकट) जब तक कि मैं मान परिवर्तन नहीं देखता।

हालांकि, आवश्यक एफ 10 की संख्या परेशान है।

निश्चित रूप से यह स्वचालित हो गया है, मैंने सोचा। लेकिन मुझे यह सुविधा मेरे माइक्रोसॉफ्ट विजुअल सी # एक्सप्रेस में नहीं मिल रही है, जो मुझे आश्चर्यचकित करता है। आखिरकार, वॉच-लिस्ट स्वचालित रूप से चमकदार लाल रंग में परिवर्तित मानों को हाइलाइट करता है।

मैं कुछ याद आ रही है?

+0

AFAIK के अलावा कुछ मूल्यों में एक्स परिवर्तनों के बाद ही मारा जाएगा, केवल उनके मूल डीबगर इसका समर्थन करते हैं। –

उत्तर

19

एक्सप्रेस संस्करण के लिए सरल चाल:

private string myValue; 
public string MyValue 
{ 
    set 
    { 
    if (this.myValue != value) Debugger.Break(); 
    this.myValue = value; 
    } 
} 
+1

फिलहाल, मेरे कोड के कुछ भाग जानबूझकर परिवर्तनीय रूप से बदलते हैं - सेटर को बिना चले गए। इसके अलावा, सेटर मूल्य निर्धारित करने के अलावा पहले से ही कई चीजें करता है। यदि मैंने "सेटर-डायरेक्ट" और सेटर सेट के लिए अलग सेटर्स बनाए हैं, तो फ़ील्ड अभी भी कक्षा से सीधे पहुंच योग्य होगा। – Anko

+1

लेकिन हाँ, यह एक पूरी तरह कार्यात्मक काम है! – Anko

6

Conditional breakpoints जो आप के बाद हैं, लेकिन ऐसा लगता है कि वे विजुअल स्टूडियो एक्सप्रेस में उपलब्ध नहीं हैं।

विजुअल स्टूडियो (गैर-एक्सप्रेस) में, जिस तरह से यह काम करता है वह यह है कि आप अपने घड़ी मूल्य के बराबर अभिव्यक्ति के साथ एक सशर्त ब्रेकपॉइंट बनाते हैं और आपकी ब्रेकपॉइंट स्थिति के रूप में "बदल गया है"।

+19

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

0

यहां मैं विजुअल स्टूडियो में ऐसा कैसे करता हूं। F9 दबाकर या बाएं हाशिए में क्लिक करके ब्रेकपॉइंट सेट करें। फिर दिखाई देने वाले लाल बिंदु पर राइट क्लिक करें और हालत कमांड का चयन करें। वहां अन्य विकल्प भी हैं।

हालांकि, यह विजुअल स्टूडियो एक्सप्रेस में समर्थित नहीं हो सकता है।

0

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

+0

यह मेरे लिए काम नहीं करेगा क्योंकि मेरा कोड बड़ा है और प्रश्न में परिवर्तनीय कई स्थानों पर बदला जा सकता है। (मुझे एक हजार if-statement लिखना होगा।) – Anko

0

उपयोग Debugger.Break कुछ क्रम स्थिति के आधार पर, या कुछ ब्रेकप्वाइंट पर rightclick जाते हैं, और सशर्त तोड़ चुनें ->

संपादित बदल गया है: के बारे में पता नहीं इस एक्सप्रेस

+0

नहीं, राइट-क्लिक मेनू में एक्सप्रेस में ऐसा कोई विकल्प नहीं है। – Anko

0
  1. में ब्रेकप्वाइंट जहां कोड
  2. ओपन ब्रेकप्वाइंट खिड़की को रोकना चाहते सेट (डीबग -> विंडोज़ -> ब्रेकपॉइंट्स)
  3. अपने ब्रेकपॉइंट पर राइट-क्लिक करें और कंडीशन चुनें ...
  4. स्थिति को वैरिएबल नाम होने के लिए सेट करें और हैस चेंज रेडियो बटन का चयन करें।
  5. ठीक क्लिक करें, और उसके बाद सामान्य :)
0

आप कुछ ब्रेकप्वाइंट पर चर परिवर्तन को पकड़ने के लिए, के रूप में वास्तव में पकड़ने जहां यह बदल गया था करने के लिए विरोध चाहते हैं, तो ब्रेकपाइंट सेट के अनुसार डिबग, राइट क्लिक करें और "हालत" चुनें। मान लें कि आपका वैरिएबल नाम एक्स है और यह वर्तमान मान ए है। स्थिति क्षेत्र में "एक्स! = ए" दर्ज करें।

अब ब्रेकपॉइंट केवल ए