2012-12-01 11 views
13

क्या जीडब्ल्यूटी में एक स्ट्रिंग में स्टैक ट्रेस प्रिंट करना संभव है? java.io में वर्गों का उपयोग मैं काम नहीं करेगा के सामान्य तरीकों लगता है, क्योंकि java.io पैकेज उपलब्ध clientside (और लेखक, PrintWriter, आदि है कि पैकेज में हैं)एक स्टैक ट्रेस को एक स्ट्रिंग में बदलें?

धन्यवाद

+1

पर यह भी बेहतर होगा यदि आप उल्लेख कर सकते हैं कि आप किस जीडब्ल्यूटी का उपयोग कर रहे हैं और क्लाइंट साइड पर आप किस लॉगिंग तकनीक का अनुसरण कर रहे हैं। – SSR

+1

आप किस स्टैक ट्रेस के बारे में बात कर रहे हैं? संकलन समय या रन टाइम? यदि यह रन टाइम है, तो बस किसी भी लॉगर का उपयोग करें, या अपने कोड को चारों ओर पकड़ने के ब्लॉक के साथ घेर लें और अपवाद स्टैक ट्रेस को जो भी स्ट्रिंग आप चाहते हैं उसे –

+0

हाय, रन अप अपवाद - मैं जीडब्ल्यूटी 2.5 का उपयोग कर रहा हूं। हाँ बात यह है कि, मैं एक स्ट्रिंग में एक पूर्ण स्टैक ट्रेस को कन्वर्ट करना चाहता हूं, और फिर इसे लेबल में प्रदर्शित कर सकता हूं। लेकिन हम स्ट्रिंग के रूप में एक अपवाद उदाहरण स्टैक ट्रेस कैसे प्राप्त कर सकते हैं? – user291701

उत्तर

10

नहीं है मुझे यकीन है कि अगर StackTraceElement नकल करते है नहीं कर रहा हूँ, लेकिन आप की तरह

for (StackTraceElement element : exception.getStackTrace()) { 
    string += element + "\n"; 
} 
9

यहाँ कुछ चल सकता है या यह है है विधि मैं एक String GWT में के रूप में एक पूर्ण स्टैक ट्रेस को पुनः प्राप्त करने का उपयोग कर रहा:

private static String getMessage (Throwable throwable) { 
    String ret=""; 
    while (throwable!=null) { 
      if (throwable instanceof com.google.gwt.event.shared.UmbrellaException){ 
        for (Throwable thr2 :((com.google.gwt.event.shared.UmbrellaException)throwable).getCauses()){ 
          if (ret != "") 
            ret += "\nCaused by: "; 
          ret += thr2.toString(); 
          ret += "\n at "+getMessage(thr2); 
        } 
      } else if (throwable instanceof com.google.web.bindery.event.shared.UmbrellaException){ 
        for (Throwable thr2 :((com.google.web.bindery.event.shared.UmbrellaException)throwable).getCauses()){ 
          if (ret != "") 
            ret += "\nCaused by: "; 
          ret += thr2.toString(); 
          ret += "\n at "+getMessage(thr2); 
        } 
      } else { 
        if (ret != "") 
          ret += "\nCaused by: "; 
        ret += throwable.toString(); 
        for (StackTraceElement sTE : throwable.getStackTrace()) 
          ret += "\n at "+sTE; 
      } 
      throwable = throwable.getCause(); 
    } 

    return ret; 
} 
+1

यह बहुत अच्छा काम करता है। लेकिन आप StackTraceDeobfuscator का उपयोग कैसे करते हैं? – confile

3

मैं एक जीयूआई लेबल में त्रुटि स्टैक ट्रेस प्रदर्शित करने की कोशिश करने की सिफारिश नहीं करता।

1) वे जीडब्ल्यूटी ओबफ्यूशन के बाद पठनीय नहीं हैं। वे सिर्फ नई लाइनों पर टैब संरेखित पात्रों के समूह की तरह दिखते हैं।

2) वे I18N प्रारूप में नहीं हैं।

3) सही तरीका यह है कि सिर्फ उपयोगकर्ता को एक अच्छी तरह से गठित त्रुटि "संदेश" दिखाएं। upgrade.getMessage() आपको गैर-ओएफएफ जानकारी की एक पंक्ति देगा जो उपयोगकर्ता को आवश्यक यूएक्स इंटरैक्शन प्रदान करेगी।

4) आप डिबगिंग (उपयोगकर्ता के लिए नहीं करने के लिए) उपयोगी आप वेब मोड अपवादों के साथ GWT के अच्छी तरह से प्रलेखित लॉगिंग सुविधा का उपयोग करना चाहिए देख रहे हैं well formed अपवाद स्टैकट्रेस के लिए -

एक) https://developers.google.com/web-toolkit/doc/latest/DevGuideLogging

ख) http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions

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