मैं परिवर्तनीय मानों को कैसे ट्रैक कर सकता हूं, रनटाइम पर, सी # में? मुझे उसी कार्यक्षमता में दिलचस्पी है जो डीबगर प्रदान करता है जब मैं निष्पादन चरणों के माध्यम से एक चर का पता लगा रहा हूं, केवल मुझे अपने कोड से इसे कॉल करने की आवश्यकता है। कुछ प्रकार के कुंजी-मूल्य का निरीक्षण, लेकिन सभी प्रकार के चर (स्थानीय, वर्ग, स्थैतिक, आदि) के लिए, न केवल गुण। इसलिए, मूल रूप से, जब कोई चर का मान बदलता है तो अधिसूचना प्राप्त होती है।मैं सी # में रनटाइम पर एक चर का पता कैसे लगा सकता हूं?
उत्तर
आप इस धारणा से काम कर रहे हैं कि डीबगर परिवर्तनीय परिवर्तनों को ट्रैक कर सकता है। यह नहीं कर सकता
अप्रबंधित कोड के साथ यह संभव है, प्रोसेसर ने डीबग रजिस्टरों को समर्पित किया है जो डेटा ब्रेकपॉइंट्स सेट करने की अनुमति देते हैं। तीन तक प्रदान किए जाते हैं। यह एक हार्डवेयर इंटरप्ट उत्पन्न करता है जब यह किसी विशेष स्मृति स्थान को लिखे जाने पर देखता है। हालांकि अन्यथा बहुत उपयोगी सुविधा प्रबंधित कोड में उपलब्ध नहीं है। कचरा कलेक्टर इसके साथ पूरी तरह से असंगत है, यह वस्तुओं को चारों ओर स्थानांतरित करता है, जिससे उन्हें एक और पता दिया जाता है।
प्रबंधित डीबगर ब्रेकपॉइंट पर "जब हिट" स्थिति का समर्थन करता है, जिससे आप आउटपुट विंडो में जानकारी डंप कर सकते हैं। हालांकि इसे ब्रेकपॉइंट की आवश्यकता है, इसे वैरिएबल वैल्यू में बदलाव से ट्रिगर नहीं किया जा सकता है। यह भी वास्तव में कोड निष्पादन धीमा कर देता है क्योंकि डीबगर वास्तव में स्थिति को निष्पादित करने से पहले एक ब्रेक स्थिति में प्रवेश करता है।
इस तरह के ब्रेकपॉइंट को रखने के लिए स्पष्ट स्थान एक संपत्ति सेटटर में है। इस सुविधा को कोड में लागू करने के लिए आपको क्या करना होगा। उदाहरण के लिए ट्रेस क्लास का उपयोग करके आप उस सेटटर में जो कुछ भी चाहते हैं, कर सकते हैं।
⁺¹, हालांकि, मैं एक साधारण सशर्त ब्रेकपॉइंट के धीमे धीमे होने के बिंदु से थोड़ा असहमत हूं। चूंकि सी # को बाइटकोड में परिवर्तित किया जा रहा है, इसलिए डीबगर के लिए सबसे उपयुक्त तरीका सिर्फ एक बाइटकोड बनाना और डालना है जो मान के स्थान पर एक मान मुद्रित करता है। मुझे कोई कारण नहीं दिख रहा है कि ऐसा क्यों किया जा सकता है - और इसलिए एक डीबगर ब्रेकपॉइंट का एक और कार्यान्वयन मैं एक प्रदर्शन बग कहूंगा। –
नहीं, सी # मशीन कोड में परिवर्तित किया गया है, आईएल सिर्फ एक मध्यस्थ कदम है। इसे देखने के लिए डीबग> विंडोज> Disassembly का उपयोग करें। फ़ीचर, एक बग नहीं। –
केवल समझदार रास्ता तुम कर सकते हो कि बिना डिबगर होगा: एक चर का उपयोग नहीं है, लेकिन एक संपत्ति का उपयोग करें, और (शायद सशर्त) सेटर को ट्रेस जोड़ें:
private int myValue;
public int MyValue {
get {return myValue;}
set {
SomeTraceMethod(myValue, value, ...);
myValue = value;
}
}
जाहिर है, इसका उपयोग मनमाना फ़ील्ड/चर के लिए नहीं किया जा सकता है।
डीबगर इसे मनमानी चर के लिए कैसे करता है? क्या कोई डिबगिंग लाइब्रेरी नहीं है जो मुझे ट्रैक के समान स्तर को प्राप्त करने में मदद कर सकती है? – luvieere
मार्क ने जो कहा, उसे जोड़ने के लिए, यदि आप इसे बहुत सारी संपत्तियों और विधियों के लिए करना चाहते हैं तो आप पहलू उन्मुख प्रोग्रामिंग तकनीकों और पोस्टशर्प जैसे पुस्तकालयों को देखना चाहेंगे।
दूसरों के लिए एक तंत्र उल्लेख किया है कि केवल समझ में आता है जैसे जब गुणों का उपयोग करके। .NET में आप INotifyPropertyChanged
इंटरफ़ेस का उपयोग कर सकते हैं।
किसी नमूने के लिए कैसे लागू करने के लिए यह स्पष्ट रूप से Windows Forms के बारे में
संदर्भित लेख वार्ता देखते हैं, लेकिन आप (इंटरफ़ेस वास्तव में में घोषित किया जाता है कि करने के लिए बाध्य नहीं कर रहे हैं System.dll में System.ComponentModel
नेमस्पेस)। वास्तव में, इस इंटरफ़ेस का व्यापक रूप से डेटा बाइंडिंग परिदृश्यों के लिए उपयोग किया जाता है, उदा। डब्ल्यूपीएफ में
मैंने इस सवाल में उल्लेख किया है कि मुझे मनमाना चर में रुचि है, गुण नहीं। मुझे INotifyPropertyChanged के बारे में पता है, जो मुझे नहीं पता है कि डिबगर की तरह मनमाने ढंग से चर का पता लगाने के लिए कैसे किया जाता है। उत्तर के लिए – luvieere
प्रबंधित डीबगर ICorDebug
COM API का उपयोग बहुत अधिक सब कुछ के लिए करता है। जिस हिस्से में आप रुचि रखते हैं वह ICorDebugValue
और इसके वंशज हैं। ध्यान दें कि विभिन्न निरीक्षणों के लिए डीबगिंग एपीआई की एक बहुत सी आवश्यकता है कि प्रक्रिया नहीं चल रही है (यानी, ब्रेकपॉइंट का सामना करना पड़ा है)।ICorDebug
का एक उच्च स्तरीय अवलोकन here है। इस पर प्रलेखन थोड़े विचित्र है, लेकिन कुछ गूगलिंग मदद कर सकता है। सौभाग्य।
- 1. मैं सी में पैलिंड्रोम का पता कैसे लगा सकता हूं?
- 2. मैं सी ++ स्ट्रिंग में "_" का पता कैसे लगा सकता हूं?
- 3. मैं cocos2d में स्पर्श का पता कैसे लगा सकता हूं?
- 4. मैं सी # 4.0 में एक सामान्य सूची में जोड़ों का पता कैसे लगा सकता हूं?
- 5. मैं फ़ाइल के एन्कोडिंग का पता कैसे लगा सकता हूं?
- 6. मैं सेवा विज्ञापन आयामों का पता कैसे लगा सकता हूं
- 7. आईफोन - मैं आईफोन संस्करण का पता कैसे लगा सकता हूं?
- 8. डब्ल्यूसीएफ: मैं संदेश निकायों का पता कैसे लगा सकता हूं?
- 9. मैं सी में कुंजी के स्ट्रोक के एक या संयोजन का पता कैसे लगा सकता हूं?
- 10. मैं गैर-पश्चिमी पात्रों का पता कैसे लगा सकता हूं?
- 11. मैं rel = "noreferrer" समर्थन का पता कैसे लगा सकता हूं?
- 12. एनएसआईएस - मैं चुप इंस्टॉल का पता कैसे लगा सकता हूं?
- 13. छवियों में मैं कैसे पता लगा सकता हूं (और सही)?
- 14. मैं पिक्चरबॉक्स पर एक दबाए गए माउस बटन का पता कैसे लगा सकता हूं?
- 15. मैं mousedown पर एक राइटमाउस बटन घटना का पता कैसे लगा सकता हूं?
- 16. एंड्रॉइड 2.2 - मैं कैसे पता लगा सकता हूं कि मैं एसडीकार्ड पर स्थापित हूं या नहीं?
- 17. मैं सी में स्ट्रिंग कैसे लगा सकता हूं?
- 18. मैं कैसे पता लगा सकता हूं कि मेरा पृष्ठ पोस्टबैक
- 19. मैं कैसे पता लगा सकता हूं कि जेनकिंस
- 20. मैं std :: मानचित्र पर लूप में अंतिम पुनरावृत्ति का पता कैसे लगा सकता हूं?
- 21. मैं Emacs में एक lisp फ़ाइल में त्रुटि का पता कैसे लगा सकता हूं?
- 22. मैं कैसे पता लगा सकता हूं कि वीबी.Net DataRow
- 23. मैं रनटाइम पर ऑब्जेक्ट में गुण कैसे जोड़ सकता हूं?
- 24. मैं जीयूआई में जावा कंसोल में तीर कुंजियों का पता कैसे लगा सकता हूं?
- 25. जब मैं एकता चलाने वाली प्रणाली पर हूं तो मैं कैसे पता लगा सकता हूं?
- 26. मैं एक बुकमार्कलेट में कीबोर्ड संशोधक का पता कैसे लगा सकता हूं?
- 27. मैं UITextField में एक कुंजीपटल ईवेंट का पता कैसे लगा सकता हूं?
- 28. मैं असेंबली * कुशलतापूर्वक * में एक विशिष्ट प्रकार का पता कैसे लगा सकता हूं?
- 29. मैं एक WPF अनुप्रयोग से लॉक इस कंप्यूटर कमांड का पता कैसे लगा सकता हूं?
- 30. मैं कैसे पता लगा सकता हूं कि ड्राइव में सी # में रीसायकल बिन है या नहीं?
डीबगर एक विकल्प क्यों नहीं है? यह वही है जो इसके लिए है। –
@ 0xA3 क्योंकि मुझे अपने आवेदन के भीतर से रनटाइम पर उन मानों तक पहुंचने की आवश्यकता है, केवल तभी जब वे बदल जाएंगे। – luvieere
वैरिएबल के परिवर्तन मानों को एक साधारण लॉग फ़ाइल में लिखने के बारे में कैसे। – Shivam