2008-10-03 9 views
5

का उपयोग कर कैप्चरिंग विधि स्थिति क्या सभी पैरामीटर/स्थानीय चर के मानों को कैप्चर करने के लिए .NET प्रतिबिंब का उपयोग करने का कोई तरीका है?प्रतिबिंब

+0

क्या आप जो कुछ हासिल करने की कोशिश कर रहे हैं उसका उपयोग केस प्रदान कर सकते हैं? – Alex

उत्तर

3

आप CLR debugging API का उपयोग कर, हालांकि यह नहीं होगा इस जानकारी पर मिल सकता है इसे निकालने के लिए लाइनों का एक साधारण जोड़ा।

+0

प्रबंधित डीबगर नमूना: http://www.microsoft.com/downloads/details.aspx?familyid=38449a42-6b7a-4e28-80ce-c55645ab1310&displaylang=en –

2

प्रतिबिंब का उपयोग स्टैक से जानकारी को कैप्चर करने के लिए नहीं किया जाता है। यह विधानसभा पढ़ता है।

आप

http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx

अच्छा लेख यहां StackTrace पर एक नज़र लेने के लिए चाहते हो सकता है:

http://www.codeproject.com/KB/trace/customtracelistener.aspx

+0

कोडप्रोजेक्ट आलेख पैरामीटर नाम दिखाता है, लेकिन मान नहीं –

1

प्रतिबिंब आपको एक पैरामीटर के प्रकार के पैरामीटर बताएगा लेकिन यह किसी विशेष आमंत्रण के दौरान उनके मूल्यों की खोज में मदद नहीं करेगा। प्रतिबिंब आपको स्थानीय चर के बारे में कुछ भी नहीं बताता है।

आपको इस तरह की जानकारी तक पहुंचने के लिए डीबगर का उपयोग करने वाले एपीआई की आवश्यकता होती है।

0

मुझे नहीं लगता कि यह संभव है, आप स्टैकट्रेस को देखकर विधि और उसके पैरामीटर प्राप्त कर सकते हैं।

System.Diagnostics.StackTrace sTrace = new System.Diagnostics.StackTrace(true); 
for (Int32 frameCount = 0; frameCount < sTrace.FrameCount; frameCount++){ 
    System.Diagnostics.StackFrame sFrame = sTrace.GetFrame(frameCount); 
    System.Reflection.MethodBase thisMethod = sFrame.GetMethod(); 
    if (thisMethod == currentMethod){ 
      if (frameCount + 1 <= sTrace.FrameCount){ 
       System.Diagnostics.StackFrame prevFrame = sTrace.GetFrame(frameCount + 1); 
       System.Reflection.MethodBase prevMethod = prevFrame.GetMethod(); 
      } 
    } 
} 
0

मुझे नहीं पता कि प्रतिबिंब का उपयोग करके यह कैसे संभव है, लेकिन बुनाई का उपयोग करके देखें। SpringFramework.Net आपको पॉइंटकट को परिभाषित करने की अनुमति देता है जो विधि कॉल को रोक सकता है। अन्य शायद यह भी करते हैं।

यहाँ "BeforeAdvice" इंटरसेप्टर http://www.springframework.net/docs/1.2.0-M1/reference/html/aop.html#d0e8139

0

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

उनकी स्क्रिप्टिंग भाषा मोनो पर चलती है, जो .NET रनटाइम का एक खुला स्रोत कार्यान्वयन है। मुझे संदेह है कि उनका समाधान नियमित .NET रनटाइम पर लागू होता है, लेकिन video of the presentation on how they did it (दूसरी छमाही पर छोड़ें) अभी भी दिलचस्प हो सकता है।