जवाबों:
System.Diagnostics
नामस्थान पर एक नजर है । वहाँ उपहार में बहुत सारे!
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
यह वास्तव में अच्छा है कि हुड के नीचे क्या हो रहा है जानने के लिए चारों ओर एक प्रहार करें।
मैं आपको सलाह दूंगा कि आप लॉगिंग सॉल्यूशंस (जैसे कि NLog, log4net या Microsoft पैटर्न और प्रैक्टिस एंटरप्राइज लाइब्रेरी) पर एक नज़र डालें, जो आपके उद्देश्यों और कुछ को प्राप्त कर सकते हैं। शुभकामनाएं मेट!
इसका एक विकल्प System.Environment.StackTraceSystem.Diagnostics.StackTrace
का उपयोग करना है जो स्टैकट्रेस का एक स्ट्रिंग-प्रतिनिधित्व लौटाता है।
एक अन्य उपयोगी विकल्प विजुअल स्टूडियो में चर$CALLER
और $CALLSTACK
डिबगिंग चर का उपयोग करना है क्योंकि यह अनुप्रयोग के पुनर्निर्माण के बिना रन-टाइम सक्षम किया जा सकता है।
Environment.StackTrace
बस एक नया उदाहरण है StackTrace
।
System.Environment.StackTrace
उस जानकारी तक पहुंचने का एक अधिक सुविधाजनक तरीका हो सकता है।
System.Diagnostics.StackTrace
- देख msdn.microsoft.com/en-us/library/...
Environment.StackTrace
हमेशा साथ शुरू होता है at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace()
? यह वर्तमान स्टैक ट्रेस का हिस्सा नहीं है क्योंकि इस बिंदु पर किसी की तलाश है।
इसे करने के दो तरीके हैं। System.Diagnostics.StackTrace()
आप वर्तमान थ्रेड के लिए एक स्टैक ट्रेस दे देंगे। यदि आपके पास Thread
उदाहरण के लिए संदर्भ है , तो आप उस ओवरलोड संस्करण के माध्यम से स्टैक ट्रेस प्राप्त कर सकते हैंStackTrace()
।
आप स्टैक ओवरफ्लो प्रश्न की जांच करना चाह सकते हैं कि गैर-वर्तमान थ्रेड का स्टैकट्रेस कैसे प्राप्त करें? ।
आप इसे कोड को संशोधित किए बिना विज़ुअल स्टूडियो डीबगर में भी कर सकते हैं।
बेशक, यह मदद नहीं करता है यदि आप एक अलग मशीन पर कोड चला रहे हैं, लेकिन रिलीज कोड को प्रभावित किए बिना या प्रोग्राम को पुनरारंभ करने की आवश्यकता के बिना भी स्टैक ट्रेस को स्वचालित रूप से बाहर निकालने में सक्षम होना काफी आसान हो सकता है।
Console.WriteLine(
new System.Diagnostics.StackTrace().ToString()
);
आउटपुट के समान होगा:
YourNamespace.Program.executeMethod (स्ट्रिंग संदेश) पर
YourNamespace.Program.Main (स्ट्रिंग [] args) पर
Console.WriteLine
अपने Log
तरीके से बदलें । वास्तव में, .ToString()
Console.WriteLine मामले की कोई आवश्यकता नहीं है क्योंकि यह स्वीकार करता है
object
। लेकिन आपको अपनी लॉग (स्ट्रिंग संदेश) विधि की आवश्यकता हो सकती है।
private void ExceptionTest()
{
try
{
int j = 0;
int i = 5;
i = 1 / j;
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
var stList = ex.StackTrace.ToString().Split('\\');
Console.WriteLine("Exception occurred at " + stList[stList.Count() - 1]);
}
}
लगता है मेरे लिए काम करता है
StackTrace
है धीमी गति से कुत्ते - तो विरले ही इसका इस्तेमाल करते हैं।