2008-12-12 7 views

उत्तर

9

उत्तर: पोस्टशर्प (नीति इंजेक्शन) का उपयोग करके, XTraceMethodBoundary विशेषता, ऑनएक्सप्शन ओवरराइड करें। यह सभी विधि इनपुट लॉग करता है और पैरामीटर प्रकार और मान लौटाता है। मैंने पैरामीटर को लॉग करने के लिए एक सरल विधि जोड़ने के लिए PostSharp को संशोधित किया। सही नहीं है लेकिन पर्याप्त अच्छा

private static void TraceMethodArguments(MethodExecutionEventArgs eventArgs) 
{ 
    object[] parameters = eventArgs.GetReadOnlyArgumentArray(); 

    if (parameters != null) 
    { 
     string paramValue = null; 
     foreach (object p in parameters) 
     { 
      Type _type = p.GetType(); 
      if (_type == typeof(string) || _type == typeof(int) || _type == typeof(double) || _type == typeof(decimal)) 
      { 
       paramValue = (string)p; 
      } 
      else if (_type == typeof(XmlDocument)) 
      { 
       paramValue = ((XmlDocument)p).OuterXml; 
      } 
      else 
      { //try to serialize 
       try 
       { 
        XmlSerializer _serializer = new XmlSerializer(p.GetType()); 
        StringWriter _strWriter = new StringWriter(); 

        _serializer.Serialize(_strWriter, p); 
        paramValue = _strWriter.ToString(); 
       } 
       catch 
       { 
        paramValue = "Unable to Serialize Parameter"; 
       } 
      } 
      Trace.TraceInformation("[" + Process.GetCurrentProcess().Id + "-" + Thread.CurrentThread.ManagedThreadId.ToString() + "]" + " Parameter: " + paramValue); 
     } 
    } 
} 
7

आप मूल रूप से नहीं कर सकते हैं। प्रतिबिंब आपको उदाहरण (और स्थैतिक) चर पर प्राप्त करने देता है लेकिन यदि आप स्थानीय चर लॉग करना चाहते हैं, तो आपको स्पष्ट रूप से ऐसा करना होगा। यह संभव है कि आप प्रोफाइलिंग एपीआई का उपयोग करके थोड़ा बेहतर कर सकें, लेकिन यह एक बहुत चरम कदम होगा।

4

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

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

2

अपवाद के बिंदु पर प्रक्रिया का मेमोरी डंप बनाने के लिए MiniDumpWriteDump का उपयोग करें। आपको पी/इसे आमंत्रित करना होगा।

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