2012-12-20 13 views
9

अतीत में, मैं "दुष्प्रभाव में एक-एक्सेसर" मुद्दा जब डिबगिंग द्वारा जला दिया गया है; जिसका अर्थ है कि मेरे ब्रेकपॉइंट्स ट्रिगर किए बिना कैश शुरू किए जा रहे हैं (क्योंकि यह पहले से ही विजुअल स्टूडियो में रुक गया था)। और इसलिए मैं तंत्र है जो दृश्य स्टूडियो कोड "बाहर के आदेश" निष्पादित करने के लिए, तो के रूप में एक डिबगर में गुण का मूल्यांकन करने का उपयोग करता है के बारे में सोच रहा हूँ। मुझे लगता है कि यह सीएलआर को बाधित करेगा?दृश्य स्टूडियो सी # में डिबगिंग करते समय गुणों का मूल्यांकन कैसे करता है?

तो सवाल: कैसे यह एक तकनीकी दृष्टि से किया जाता है? यह समझाने वाले लेख उपयोगी होंगे।

+0

मैं इस पर एक लेख भर में आने वाले को याद करने लगते हैं, लेकिन मेरे गूगल फू इसे फिर से खोजने के लिए बहुत कमज़ोर है:

इस परीक्षण कार्यक्रम के उत्पादन होता है। – Smashery

+0

[दुष्प्रभाव और भाव] शुरू करने के लिए (http://msdn.microsoft.com/en-us/library/a7a250bs.aspx) – horgh

उत्तर

2

VS2012 तरह लग रहा है (और शायद पिछले संस्करणों के साथ-साथ) "मुख्य थ्रेड" या शायद धागा कि ब्रेकप्वाइंट हिट का उपयोग कर संपत्ति के गेटर निष्पादित करता है।

static class TestSideEffects 
{ 
    public static void Test() 
    { 
     Console.WriteLine("Main Thread: {0}", Thread.CurrentThread.ManagedThreadId); 
     var o = new TestSubject(); 
     Console.WriteLine("Property Value: {0}", o.IntGetValueNoSe()); 
    } 
} 

class TestSubject 
{ 
    private int _prop=0; 
    public int TheProperty 
    { 
     get 
     { 
      Console.WriteLine("Thread accessing the property: {0}", Thread.CurrentThread.ManagedThreadId); 
      return ++_prop; 
     } 
    } 
    public int IntGetValueNoSe(){return _prop; } 
} 

मैं दो breakpoints सेट:

यह मेरा परीक्षण कोड है ही टेस्ट विधि 3 लाइन पर और गेटर में, और हर बार जब मैं ओ उदाहरण पर मेरे माउस होवर - यह कार्यान्वित दूसरे ब्रेकपॉइंट को ट्रिगर किए बिना गेटर। यह वही उपयोग करता है (इस मामले में मुख्य) थ्रेड। थोड़ी देर पहले

Main Thread: 8 
Thread accessing the property: 8 
Thread accessing the property: 8 
Thread accessing the property: 8 
संबंधित मुद्दे