Java के Exception.printStackTrace () के बराबर C #?


83

क्या जावा के लिए C # समतुल्य विधि है Exception.printStackTrace()या क्या मुझे खुद को कुछ लिखना है, अपने तरीके से इनर एक्सिडेंस के माध्यम से काम करना है?

जवाबों:


120

इसे इस्तेमाल करे:

Console.WriteLine(ex.ToString());

से http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx :

ToString का डिफ़ॉल्ट कार्यान्वयन उस वर्ग का नाम प्राप्त करता है जिसने वर्तमान अपवाद को फेंक दिया, संदेश, आंतरिक अपवाद पर ToString को कॉल करने का परिणाम, और कॉल करने का परिणाम Environment.StackTrace। यदि इनमें से कोई भी सदस्य अशक्त है, तो उसका मान लौटाए गए स्ट्रिंग में शामिल नहीं है।

ध्यान दें कि उपरोक्त कोड में कॉल की ToStringआवश्यकता नहीं है क्योंकि इसमें एक अधिभार है जो सीधे लेता है System.Objectऔर कॉल ToStringकरता है।


1
बस इसे .Net कोर 2.1 में लिनक्स पर आज़माया और ऐसा लगता है कि यह सच नहीं है
सेलेरर

104

मैं जोड़ना चाहूंगा: यदि आप एक अपवाद के बाहर ढेर प्रिंट करना चाहते हैं, तो आप उपयोग कर सकते हैं:

Console.WriteLine(System.Environment.StackTrace);

10

जैसा कि ड्रू कहते हैं, बस अपवाद को परिवर्तित करना एक स्ट्रिंग ऐसा करता है। उदाहरण के लिए, यह कार्यक्रम:

using System;

class Test
{
    static void Main()
    {
        try
        {
            ThrowException();
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }

    static void ThrowException()
    {

        try
        {
            ThrowException2();
        }
        catch (Exception e)
        {
            throw new Exception("Outer", e);
        }
    }

    static void ThrowException2()
    {
        throw new Exception("Inner");
    }
}

इस उत्पादन का उत्पादन:

System.Exception: Outer ---> System.Exception: Inner
   at Test.ThrowException2()
   at Test.ThrowException()
   --- End of inner exception stack trace ---
   at Test.ThrowException()
   at Test.Main()



0

क्या कोई C # लॉगिंग API नहीं है जो एक्सेप्शन को एक तर्क के रूप में ले सकता है और आपके लिए सब कुछ संभाल सकता है, जैसे कि Java's Log4J करता है?

यानी, Log4NET का उपयोग करें।


मुझे लगता है कि यह इंगित करता है कि क्यों Microsoft ने C # में ऐसी कार्यक्षमता प्रदान नहीं की होगी जो जावा ने की थी (पुरानी भाषा को और अधिक सरल समय में विकसित किया गया था)। यानी, एक बेहतर तरीका है जिसकी सिफारिश की जाती है।
JeeBee 13

0

चूँकि @ रयान-कुक का जवाब मेरे लिए काम नहीं आया, अगर आप बिना किसी अपवाद के स्टैक ट्रेस प्रिंट करना चाहते हैं, तो आप उपयोग कर सकते हैं:

System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
Console.WriteLine(stackTrace)

दुर्भाग्य से, यह एक PCL में या .NETStandard लाइब्रेरी में नहीं किया जा सकता है


-1

इसके अलावा, Log4Net पर देखें ... इसका एक लॉग।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.